Linux服务器中由于内存不足导致tomcat自动关闭解决方案

Linux服务器中由于内存不足导致tomcat自动关闭解决方案,第1张

服务器环境:

​ 腾讯云1核2G

​ *** 作系统:CentOS7

最近将项目部署到服务器后发现tomcat总是过一段时间会自动关掉。

查看系统日志

发现如下内容:

原因分析:linux会定时检查系统内存大小,发现剩余内存过小时会自动优先清理占用内存较大的进程,因此tomcat进程经常会被系统清除掉

(1)创建脚本文件tomcatMonitor.sh

(2)对脚本文件授权

(3)将脚本文件加入到定时任务中

添加如下内容

保存并退出

(如果出现以下内容,则输入3进入vim编辑模式再进行编辑)

具体crontab命令参考: https://www.cnblogs.com/zoulongbin/p/6187238.html

(4)查看任务执行情况

输出如下内容表示定时任务正在执行

参考博客:

https://www.cnblogs.com/zoulongbin/p/6187238.html

https://blog.csdn.net/zhang41228/article/details/79860030

ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

发现好多npm相关的

查看进程

ps -eo rss,pid,user,command --sort -rss | grep npm

sudo kill -9 [pid]

卸载云镜命令

bash /usr/local/qcloud/YunJing/uninst.sh

卸载云监控命令 (barad_agent top中查看到的进程名称)

wget -qO- https://raw.githubusercontent.com/littleplus/TencentAgentRemove/master/remove.sh | bash

然后手动kill掉 barad_agent 对应的进程

rm -rf /usr/local/qcloud

清理页面缓存

echo 1 >/proc/sys/vm/drop_caches

清理目录缓存和inodes

echo 2 >/proc/sys/vm/drop_caches

清理pagecache、dentries和inodes

echo 3 >/proc/sys/vm/drop_caches

清理文件系统缓存和清理僵尸(zombie)对象和它们占用的内存

sync

free -h

优化前

优化后

会报错 No space left on device

查看磁盘使用情况使用 df命令 (英文全拼:disk free)

最常用的命令 df -h

使用du命令查看指定的目录或文件所占用的磁盘空间(英文全拼:disk usage)

优化后

在Windows中,资源管理器查看内存使用情况,如果使用率达到80%以上,那么运行大型程序就会觉得系统不顺畅,因为在内存短缺的情况下使用交换分区,频繁的从磁盘交换页面会大大影响系统性能。而在使用Linux系统时,我们使用free命令查看Linux系统内存使用情况时,会发现内存使用率一直处于较高水平,即使此时系统没有运行很多软件。这是Windows和Linux在内存管理方面的区别。这样看来,Linux系统占用了我们的内存(Linux占用了我的RAM),但这也是其内存管理的特点。

free命令介绍

为了使用自由命令查看我们的实验室文件服务器内存的结果,-M选项表示MB为单位:

第二行输出表示系统内存的使用。

注:前四个术语更好地理解。缓冲区和缓存无法找到正确的单词进行翻译。它们之间的区别在于:

A buffer is something that has yet to be “written” to disk.A cache is something that has been “read” from the disk and stored for later use.

即buffer用于存放要输出到磁盘的数据,而cache是从磁盘读出存放到内存中待今后使用的数据。它们的引入均是为了提供IO的性能。

以上输出的结果可能是第三行,为什么要向用户显示呢?内存使用减去系统缓冲/缓存的内存表示是什么?系统空闲内存添加到缓冲区/缓存的内存中的是什么?

内存的分类

我们将内存分为三类,对于用户和 *** 作系统的使用有不同的术语:

上表中something代表的正是free命令中”buffers/cached”的内存。由于这个内存实际上是从 *** 作系统的角度使用的,所以如果用户想要使用它,那么它可以被用户的程序快速地回收和使用,因此应该从用户的角度将内存划为空闲。

再次返回free命令输出的结果,第三行输出的结果应该是可以理解的,并且该行上的数字从用户的角度表示系统内存的使用。因此,如果使用top或free命令查看系统中还剩下多少内存,那么实际上应该将空闲内存添加到buffer/cached,即实际的系统空闲内存。

buffers/cached好处

Linux内存管理已经做了很多精心的设计,除了dentry缓存之外(对于VFS,为了加快文件路径名到inode的转换),还采用了两种主要的缓存方法:缓冲缓存和页面缓存,目的是提高磁盘IO的性能。从低速块设备读取数据暂时存储在存储器中。即使此时不再需要数据,也可以在下一次应用程序访问数据时直接从存储器读取数据,从而绕过低速块设备,从而提高系统的整体性能。

Linux将充分利用免费内存。在我看来,如果内存是免费的,最好缓存更多的数据。下次程序再次访问数据时,速度会更快。如果程序希望使用内存,并且系统中的内存不足时,那么它不会使用交换分区,而是快速恢复部分缓存,把它们留给用户程序。

因此,正如您所看到的,buffers/cached实际上还是有点用处,而真正的缺点可能是用户认为Linux消耗内存!然而,Linux不会耗尽您的内存,只要您没有使用交换分区,您就应该庆幸您的内存耗尽了,因为Linux会缓存大量数据,也许下次您会从中受益!

实验证明

通过实验验证了以下结论。

我们读了一份大文件,比较两种阅读的实践:

1.首先,生成一个大的1G文件:

2.空缓存:

3.读取此文件并测试所消耗的时间:

4.再次读取文件并测试所消耗的时间:

从上面可以看到,第一次读取这个1G文件需要大约18秒,第二次读取只需0.3秒,增加了60倍!那么你觉得Linux系统还是吃内存吗?


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8387942.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存