我有一个具有 doPost 方法的 Java Servlet,当 doPost 完成时,我假设 Glassfish 会关闭连接,但我错了。 Servlet 在 Linux 服务器上,在 300 个帖子后返回线程数:
ps -eLFU glassfish | grep domain1 | wc -l
362
在任何帖子之前,线程数为 72。响应全部成功,但我不明白为什么 Glassfish 不关闭连接。我正在使用 Glassfish 的默认配置。
我试图解决这个问题的原因是当我的 servlet 在某个时候被击中时,我在 Linux 服务器上得到这个错误:
su: cannot set user id: Resource temporarily unavailable
在/etc/security/limits.conf 我有这个:
glassfish hard nproc 4192
glassfish soft nproc 2024
我不想更新 limits.conf,而是尝试确保它不会达到这些数字。
最佳答案
glassfish 是否保持连接打开?或线程运行?它们是不同的东西。线程可能会启动,并且不会关闭以在将来为新连接提供服务。这是标准行为。您能否使用“kill -3 PID”进行线程转储,其中 PID 是 glassfish 进程的进程 ID?这会将所有正在运行的线程转储到标准输出,您可以看到每个线程在做什么。在那里您将能够看到它是否卡在您的代码中或正在等待新连接。您可以找到更多信息 here关于如何获取线程转储。
关于java - Glassfish 在完成请求时不关闭线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958598/