gpt4 book ai didi

java - 访问远程应用程序服务器上的线程

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:46 24 4
gpt4 key购买 nike

我正在开发一个旧版 Java Web 应用程序,该应用程序在 JBoss 6 EAP 上运行并使用 servlet 构建。该应用程序部署在生产环境中的两个独立的Web服务器上,并且请求是负载均衡的。

该应用程序有一些在单独线程中运行的数据密集型进程。我试图做的是构建一个实用程序,允许管理用户查看有关在应用程序的两个实例上运行的线程的信息。将显示的唯一线程是由业务逻辑调用的线程。例如,服务器 A 上的用户应该能够看到服务器 A 和服务器 B 的线程信息。

这是通过服务器 A 调用 servlet B 上的 servlet - ThreadMonitor 来完成的,该 servlet B 执行以下方法。

public List<CustomProcess> getProcesses() {
List<CustomProcess> allProcesses = new ArrayList<>();
Map<Thread, StackTraceElement[]> allThreads = Thread.getAllStackTraces();
if (allThreads != null) {
Iterator<Thread> threadIterator = allThreads.keySet().iterator();
while(threadIterator.hasNext()) {
Thread thread = iterator.next();
if (thread instanceof CustomProcess) {
allProcesses.add(thread);
}
}
}
return allProcesses;
}

问题在于,当服务器 B 上的 servlet 执行此方法时,服务器 B 上运行的业务逻辑启动的线程都没有返回。我检查了日志中是否有安全异常,没有发现任何表明存在问题的信息。

当然,服务器B上的应用程序可以直接调用该方法,并且返回我期望的线程。仅当处理来自服务器 A 的 HTTP 请求的 servlet 调用此方法时,才会出现此问题。

我在这里忽略了什么?

最佳答案

这个问题的解决与@xerx593 在他的评论中提到的内容有关。事实证明,基础设施团队在一台应用程序服务器上设置了两个 JVM。该应用程序部署到每个 JVM,要监视的线程正在其中一个 JVM 上运行,而向其发送所有线程列表请求的 Servlet 则位于另一个 JVM 上。

关于java - 访问远程应用程序服务器上的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54298320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com