
但是重新启动程序后,通过 free -h 查看服务器仍然剩余14G内存,而且java程序已经固定了堆内存为4g,所以考虑是否是创建线程太多,导致内存不够(1个线程1Mb内存,创建1000多个线程也才用1g,除非是无限制的创建线程)。
查看线程数量,高达1450,远远超过自定义的所有线程池数量,而且每隔一段时间线程都在增长。
使用 arthas 的`thread -all'命令查看有哪些线程
通过关键子过滤,发现定时任务的线程数量高达 991 个,说明定时任务有bug。需要去解决。
发现定时任务框架中,有一个bug,每次执行定时任务时。都会创建线程池,里面有一个线程异步执行定时任务。当定时任务对象被回收后,里面的线程池对象未被回收。导致程序中的线程数量不断增加,最后服务器内存用尽。我们知道程序的运行需要消耗内存。如果在高防服务器上运行的程序太多,会占用太多的内存空间,其他程序就无法正常运行了。所以,我们才会收到系统提示高防服务器内存被占满的提醒。
因此,建议关闭一些不必要的程序,以避免过多的程序占用必要程序运行的内存资源。此外,除必要的应用程序外,不建议安装多余的软件,必要时可删除一些不必要的程序来释放空间。服务器内存不能用普通pc内存,不认。
1、服务器内存,主要是ecc和reg内存,都有特殊的校验和寄存器功能,和普通的pc内存是不一样的。要求很高。
2、普通的pc内存,直接插到服务器主板上是不能认到的。有个别要求不严的工作站级的主板可以认,但容易出错。
服务器内存也是内存,它与平常在电脑城所见的普通pc机内存在外观和结构上没有什么明显实质性的区别,它主要是在内存上引入了一些新的技术,普通pc机上的内存在服务器上一般是不可用的服务器认不到的,这就是说服务器内存不能随便为了贪便宜用普通pc机的内存来替代的原因了。
有些人把具有某种技术的内存就称之为“服务器内存”,其实是不全面的,服务器的这些内存技术之所以在目前看来是服务器在专用,但不能保证永远只能是服务器专用。这些新技术之所以先在服务器上得以应用是因为服务器价格较贵,有条件得以应用,这些新技术由于价格的原因暂时在普通pc机上无法实现应用,但是会随着配件价格的下降逐步走向普通pc机,就像原来的奇偶校正内存一样原先也是最先应用在服务器上,现在已经很普遍了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)