gpt4 book ai didi

java - Tomcat Web 应用程序自动停止

转载 作者:行者123 更新时间:2023-11-28 22:43:49 29 4
gpt4 key购买 nike

我有一台运行 CentOS 5.9、Apache-Tomcat 5.5.36 的专用服务器。我写了一个 JAVA web 应用程序,它每分钟运行一次以从多个传感器收集数据。我正在使用 ScheduledExecutorService 来执行线程。 (每分钟一个传感器一个线程,可以有一百多个传感器)线程的流量是

  1. 从数据库中收集传感器信息。
  2. 向仪器发送命令以收集数据。
  3. 用数据值更新数据库。

还有另一个应用程序每分钟检查一次数据库并向用户发送警报(如果需要)。我已经使用 jvisualVM 监视了应用程序,我找不到任何内存泄漏。对于每个线程。应用程序工作正常,但一段时间后(24 小时 - 48 小时)应用程序停止工作。我无法找出问题所在,是服务器配置问题、线程过多还是什么?

有没有人知道可能出了什么问题,或者有没有人做过类似的工作?请帮忙,谢谢

更新:包括代码

public class Scheduler {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void startProcess(int start) {
final Runnable uploader = new Runnable() {
@SuppressWarnings("rawtypes")
public void run()
{
//Select data from the database
ArrayList dataList = getData();
for(int i=0;i<dataList.size();i++)
{
String args = dataList.get(i).toString();
ExecutorThread comThread = new ExecutorThread(args...);
comThread.start();
}
}
};
scheduler.scheduleAtFixedRate(uploader, 0, 60 , TimeUnit.SECONDS);
}
}

public class ExecutorThread extends Thread {

private variables...
public CommunicationThread(args..)
{
//Initialise private variable
}

public void run()
{
//Collect data from sensor
//Update Database
}
}

最佳答案

没有代码就不能说太多,但你需要确保你的线程总是正确退出——不会在任何异常时卡在内存中,关闭与数据库的连接等。

此外,为了监控您的应用程序,您可以每隔一段时间进行一次线程转储,以查看该应用程序生成了多少线程。

另一个建议是configure Tomcat to take a heap dump on OutOfMemoryError .如果这是一个问题,您将能够分析是什么填满了内存

关于java - Tomcat Web 应用程序自动停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16010902/

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