我有一个带有ubuntu18.04.4的VPS,有2gb和512 2gb的交换空间。定期使用600-800mb和100 is的交换机,一切都很好。
2周前,我更新了WAR (tomcat),内存增加到1.2gb和400-500mb交换。起初,我认为这是正常的,因为我确实改变了一些应该消耗更多内存的东西。
我需要重新启动服务器(另一个原因)。直到那时,我才意识到内存再次下降到600-800mb和300 it交换,并且有一段时间是这样的。这意味着以前,有东西占用了内存,并且在重新启动时释放了它。
经过两周的相同消耗,我更新了WAR,并再次注意到,在重新部署之后,使用400 re的交换空间,内存跃升到1.2gb。这一次,我只重新启动tomcat服务,内存消耗降低到600 to和100 to交换。
htop显示,Java是消耗内存的,但是我怎么知道在卸载/部署之后占用内存的确切原因是什么,而只有服务重新启动才会释放它?
谢谢
发布于 2020-07-05 11:46:03
https://www.linuxatemyram.com/
操作系统使用所有可用内存是正常的,甚至可以轻松地使用交换空间。
不要做太多的努力,迫使它回到50%的利用率以下。那只会再被利用的。当利用率徘徊在听起来不错的60%的水平时,不太可能会引起很大的担忧。例如,如果其他内存需要,应用程序文件的任何副本的任何文件系统缓存都会被快速回收。
相反,注意应用程序本身是缓慢的。设置目标用户响应时间或类似时间,并监视您如何实现服务目标。用户体验比您认为的内存利用率更重要。
对于OS内存指标,在Linux上查看页面的进出速率。内存不足的系统会造成沉重的页面速率,因为它需要重新移动内存才能工作。这就形成了一个缓慢的感觉系统,因为交换空间比DRAM慢得多。
显然,内存完全耗尽是不好的,OOM杀手,也许是恐慌。但这发生在接近0页可用的地方。你还没有显示出严重记忆压力的证据。
Java在堆度量收集、优化和避免垃圾收集暂停之间有自己的内存调优。这是另一次的问题,也许是在您研究了这个应用程序的堆模式并估算了这个2GB实例的实际内存预算之后。
https://serverfault.com/questions/1023884
复制相似问题