记一次线上事故内存泄漏:java.lang.OutOfMemoryError: unable to create new native thread
解决过程
一开始以为是内存不足 查看内存 发现空间足够
足够为什么不能创建线程?
ulimit -u 查看线程限制条数
1024
jps -l 查看应用id
top -Hp 3395 可以查看进程线程id总数及具体的线程id
pstree -p 3395 |wc -l 可以查看进程id 线程总数
jstack 3395 查看应用所有线程执行情况
将10进制转16进制
- printf("%x", *str)
- echo 'obase=16;17'|bc
修改配置文件
/etc/security/limits.conf
-
- nproc 16384
虚拟机限制
Java虚拟机本身限制:
-Xms #intial java heap size
-Xmx #maximum java heap size
-Xss #the stack size for each thread