Linux上有多个Java Webapps总线程限制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux上有多个Java Webapps总线程限制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3495字,纯文字阅读大概需要5分钟。
内容图文
![Linux上有多个Java Webapps总线程限制](/upload/InfoBanner/zyjiaocheng/949/fae27b4ead9f4168bf0251b460a80ed4.jpg)
最近,当两个机器上的两个Java Web应用程序的线程总数都达到1024时,我观察到它们“ java.lang.OutOfMemoryError:无法创建新的本机线程”.
我用来显示进程线程数的命令是:ps huH p $pid | wc -l
[root@vm119 ~]# ps huH p 11294 | wc -l
378
[root@vm119 ~]# ps huH p 11052 | wc -l
646
在我的情况下,Java Webapp实际上是从同一jar文件的两个副本中派生的Java守护程序.
在此情况下,vmstat仍显示大量可用RAM.我还启动了另一个Java代码(继续创建新线程,直到得到OutOfMemoryError并打印出创建的线程总数),以查看它可以创建多少个线程.预期它表示仍可以创建31051线程.这意味着操作系统仍然具有当时创建本地线程所需的本地资源.
这两个Java Webapp均使用以下JVM选项启动:-Xmx4096m -Xms512m -Xss256k
在计算机上的ulimit -a:
[root@vm119 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62810
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 62810
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我研究并遵循了“ java.lang.OutOfMemoryError:无法创建新的本机线程”问题的常规调查例程,但是找不到真正有用的东西.
两个Web应用程序的1024个线程总数似乎非常可疑…难道它们加起来就是1024个吗?还是我错过了对OS或JVM的一些限制?
解决方法:
在Aris2World和lenach87的帮助下,我设法找到了自己的问题的答案.
根本原因是由于Linux对进程的执行用户具有最大用户进程(NPROC)限制.
我在调查期间以root用户身份登录,因此结果ulimit -a是root用户的:
[root@vm119 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62810
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 62810
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
但是,我应该检查的是webapps执行用户的限制:
[root@vm119 ~]# su - user -c "ulimit -a"
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 62810
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
为了更改执行用户的限制,我手动将两行插入
/etc/security/limits.conf
[root@vm119 ~]# cat /etc/security/limits.conf | grep user
user soft nproc 4096
user hard nproc 4096
内容总结
以上是互联网集市为您收集整理的Linux上有多个Java Webapps总线程限制全部内容,希望文章能够帮你解决Linux上有多个Java Webapps总线程限制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。