达到Java线程下限(503个线程)
我还有一个Java线程限制的问题,但我只讨论了区区500个线程左右,我找不到我达到的限制。事实上,它似乎发生在503个线程的限制下,即创建线程504似乎会产生可怕的结果:达到Java线程下限(503个线程),java,multithreading,memory-leaks,out-of-memory,systemd,Java,Multithreading,Memory Leaks,Out Of Memory,Systemd,我还有一个Java线程限制的问题,但我只讨论了区区500个线程左右,我找不到我达到的限制。事实上,它似乎发生在503个线程的限制下,即创建线程504似乎会产生可怕的结果: javax.ws.rs.ProcessingException: java.lang.OutOfMemoryError: unable to create new native thread at org.glassfish.jersey.client.JerseyInvocation.submit(Jerse
javax.ws.rs.ProcessingException: java.lang.OutOfMemoryError: unable to create new native thread
at org.glassfish.jersey.client.JerseyInvocation.submit(JerseyInvocation.java:980) [jersey-client-2.25.jar:na]
at org.glassfish.jersey.client.JerseyInvocation.submit(JerseyInvocation.java:889) [jersey-client-2.25.jar:na]
at org.glassfish.jersey.client.JerseyInvocation$AsyncInvoker.method(JerseyInvocation.java:669) [jersey-client-2.25.jar:na]
环境详情:
ulimit-a
输出:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15743
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15743
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
意见:
-Xss
设置为默认值(1MB)、512k
和2M
的情况下复制-所有变化都在503个线程处结束,即这似乎不是物理内存限制,而是一些计数器限制top
报告的内存使用率没有超过~70%ulimit
值ulimit
显示的限制,但问题和链接是关于RedHat的。SLES有类似的设置吗
基本上我想知道-发生了什么事?为什么我不能创建第504个线程?原来这是一个系统问题 systemd对单个进程的线程数进行了限制,默认为512个线程。我认为我们的503测试限制实际上是
503 counted threads
+ 9 other threads not counted
= 512 thread limit.
在/etc/systemd/system.conf
中设置DefaultTasksMax=infinity
解决了这个问题(这确实需要重启机箱)
我们实际上正在运行一个initd服务,该服务通过systemctl在systemd上受支持。这意味着我们不能仅为我们的服务设置不同的限制,而必须为所有服务设置全局限制。系统上同时运行的其他进程有多少?每个线程消耗一个pid,您可能达到了内核限制。
/proc/sys/kernel/pid_max
的值是多少?这与你从ps-AL——无标题| wc-l
中得到的值相比如何?ps-AL——无标题| wc-l
得到765,而sudo lsof-Ki | wc-l
得到3672。我们认为,我们可能遇到了这里描述的相同问题:您应该将此作为问题的答案。