我们有一个Java项目是在linux下部署的。
以前都没有发现什么问题,但是最近在某个客户Linux机器(RedHat4企业版)上运行java后出现了大量的java进程现象,而且很快就将内存耗尽了。
查了相关资料,说是Java多线程在Linux环境下会采用多进程处理,但是也不至于每次都启动一个新的java进程吧,而且每次启动一个进程后都要耗掉不少内存。
是不是Linux下需要修改什么配置?
谁能帮忙看下,谢谢~
问题补充:
有没有什么办法让它不要启动那么多的进程?
问题补充:
有没有什么办法让它不要启动那么多的进程?
问题补充:
有没有办法不让它启动那么多的进程,太消耗资源了~
问题补充:
也查了相关的一些资料。
出现这种问题的资料都是很早以前的,说是跟Linux内核有关系,我查了,客户的Linux是2.6内核的,NPTL版本是2.3.4,照理应该不会有这样的问题。
一楼说我创建了太多的线程,我在Redhat 4上面写了个创建线程的测试代码,Xmx500m的情况下到6000个线程,没有出现上述情况。
真的是很头痛,不知是怎么回事?
现在连是什么问题都没有找到,只是在不停的试,就差换jre和操作系统了~
问题补充:
活动线程: 336
峰: 374
守护线程: 60
已启动的线程总数: 626
当前类已装入: 9,007
已装入类的总数: 9,044
已卸载类的总数: 37
当前堆大小: 129,259 Kb
堆大小的最大值: 986,112 Kb
分配的内存: 297,024 Kb
这是用jconsole观察的结果~
线程一直保持在300-400之间~
后台用:ps -ef|grep java
可以查看到有5个相同的进程存在
CPU使用率比较高,保持在50%到90%之间~
初步怀疑可能某个线程占用率很高或者请求阻塞了~
线程列表里面看到有大量线程是http的~
但是300-400的线程也不多吧~
问题补充:
问题似乎已经找到了,还要在观察一下~
初步估计是:Redhat 4与JRE1.6版本不兼容造成的,改用低版本的JRE1.5就OK了。
真是比较郁闷,查了很久~
谢谢各位的帮助~
你用JCONSOLE连接用户的机器看看, 总共有几个线程了。
有些平台下JAVA 采用的是多进程多线程的机制。如果你从创建了太多的线程, 就会有很多的进程。 那么可能你的应用是有线程泄露造成的的。
不知道是什么样的应用. 有这么神奇的效果?
linux下只有进程的概念,windows才有线程,很多java进程,很正常。估计确实是你程序写的有问题,查查吧。
楼上的, thread怎么就成windows才有了? 神奇了。
POSIX标准你看看什么时候出来的。
恩,我的表述不完全,我是想说,linux下线程概念和windows不太一样,linux下线程和进程是被cpu同等调用的,而windows下是线程是进程的一个子范畴,所以linux下没有真正意义上进程的概念,只是实现了共享,用起来都一样,和windows没区别。
所以linux下没有真正意义上线程程的概念,表述不准确,呵呵