java内存溢出问题解决思路之java.lang.OutOfMemoryError: unable to create new native thread

最近这边公司新上几个项目,时间比较急中间遇到一些问题。测试反馈在测试管理平台的时候,有bug.
那么我首先到这台项目上查看日志如下:

那么从日志看,显然是其他的依赖项目出现问题导致的。直奔故障服务器,发现确实程序已经将死了。
查看日志如下:

内存溢出?查看一下,似乎并不是内存不够了。
[root@jftest010-151 bypay]# free -m
total used free shared buffers cached
Mem: 7870 5432 2438 0 167 1122
-/+ buffers/cache: 4142 3728
Swap: 7999 0 7999
那么怀疑是不是程序本身分配的内存太小:下面进行jvm的优化。

结果发现并没有什么卵用。

那么有可能是线程开的太多。
感觉原因快找到了,切换到运行账户使用命令:
$ su username
$ ulimit -u
$ 1024
生产上所有程序都是同一个普通用户下运行,于是查看该账户下所有的线程。

也即是说,随时都可能会超过1024,导致内存溢出。查看看进程当前运行的线程数命令也可以为:pstree -p 3660 | wc -l
原因找到,操作系统对运行程序的账户有最大线程数限制。

再重启,OK项目已经好了。

总结:

  1、经过总结,在遇到问题后,首先查看日志,定位问题,逐步的找出根本原因。

  2、关于java内存调优,个人认为只有在中大型系统才需要调优或者服务器硬件条件一般的情况下才需要调优,才能有所效果。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: