1.问题描述
每次启动信息报错如下:
2.排查过程
2.1起初怀疑是堆内存不够:
将本地队内存调整由-Xms512M,-Xmx1024M,改成与测试环境相同1536M,还是失败
如上图报错中有notify问题,怀疑notify启动占用线程数过多,增加如下线程限制:
后进行重启测试,发现还是启动报错,排除notify问题
2.2后续怀疑是线程空间占用过大
调整xss 128k
一般说来,Stack Space为128K是够用的。不过既然报错按照160k进行更改,直接报错如下
栈空间溢出。。。放弃此路。。
2.3既然自己机器不行,试试别人机器以及日常环境
日常环境ok,同事eclipse ok (Windows),同事 idea 启动失败(mac)
比较奇怪。。要不要放弃idea。。后排查eclipse启成功以及日常成功原因
日常环境
:ulimit -u 显示:131072
mac环境
:ulimit -u 显示:709
注: ulimit -u由此可以看出最大线程数差异,也理解了为何mac启动cannot create native thread
备注:可以进行修改,但是根本原因没找到,因此未进行调整
ulimit -u 65535 命令或者直接修改limits.conf文件,将max user process参数修改为65535。
2.4启动后加入HeapDumpOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp
并没有任何日志。。。。
3 问题再次思考:到底多少内存,才能合适的创建最多的线程,保证线程够用?
有了以上理论支撑,因此不是堆内存调的越大越好
3 换个思路从头再来
idea 装入java virtualvm插件
http://www.oschina.net/translate/setting-up-visualvm-in-under-5-minutes
真相大白。。。DTS起了1800左右线程。。。
`后沟通dts负责同学,因是并行计算job 执行频率高老的版本没有进行好的线程回收,否则线上也可能会有OOM
因此需要dts版本升级,目前最稳定版本1.6.3`
总结
花了一定精力排查,环境各种折腾jdk升级、tomcat升级,差点从idea转成eclipse,终于水落石出建议对dts进行升级,避免线上带来不必要的麻烦