Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.OutOfMemoryError:无法创建新的本机线程-杀死未使用的线程-JVM_Java_Linux_Spring_Multithreading_Jvm - Fatal编程技术网

java.lang.OutOfMemoryError:无法创建新的本机线程-杀死未使用的线程-JVM

java.lang.OutOfMemoryError:无法创建新的本机线程-杀死未使用的线程-JVM,java,linux,spring,multithreading,jvm,Java,Linux,Spring,Multithreading,Jvm,我正在从事一个在SpringMVC上开发的项目,该项目使用wildfly作为Web服务器 我遇到了java.lang.OutOfMemoryError的例外情况:无法创建新的本机线程,经过一些研究,我知道web应用程序不知何故请求了它应该请求的更多线程(可能是线程池没有被正确利用) 我想知道是否有任何方法可以**安全地杀死JVM****的n个使用过的线程?一种选择是检查整个系统,并对实际泄漏的位置进行分析 另一种方法是安全地杀死未使用的线程,以便在请求新线程时JVM可以使用资源 我确实运行了ps

我正在从事一个在SpringMVC上开发的项目,该项目使用wildfly作为Web服务器

我遇到了
java.lang.OutOfMemoryError的例外情况:无法创建新的本机线程
,经过一些研究,我知道web应用程序不知何故请求了它应该请求的更多线程(可能是线程池没有被正确利用)

我想知道是否有任何方法可以**安全地杀死JVM****的n个使用过的线程?一种选择是检查整个系统,并对实际泄漏的位置进行分析

另一种方法是安全地杀死未使用的线程,以便在请求新线程时JVM可以使用资源


我确实运行了
ps-huH p | wc-l
,并且知道wildfly进程使用了1022个线程。虽然
max user process limit
是1024

但我真的很讨厌这个错误。有几个问题。首先,您确定它比它“应该”请求的线程多吗?我们在服务器(其中>1024没有错误;必须更改进程限制)和厚客户端上都遇到了这个问题。第二,如何识别“未使用的线程”?第三,您是指Linux意义上的“kill”(例如,在bash提示符下kill)还是使用Java请求线程终止?@KevinO Ofcruse使用Java请求将更可行。应用程序处于空闲状态,但线程仍在使用。。。如果可以通过JVM或shell的一些命令来完成,我将生成一个.sh并定期执行它。。我们如何更新进程限制,我也可以试试。本质上,获取所有线程的列表,遍历它们,然后请求每个线程关闭。您可以使用ThreadMXBean,递归地查找根ThreadGroup,或者获取所有堆栈跟踪。根据线程应该关闭的某些确定,可以使用特定的方法,也可以使用thread.interrupt()。当然,我假设这些线程是由应用程序创建的,而不是wildfly服务器本身。如果是后者,则可能是可纠正的配置问题。一定要找出是谁在创建这些线程,并考虑将逻辑添加到线程中去自动关机。