优化背景,阿里云服务器 4G +双核 +40G,之前运行无压力,后续功能在增加太多,运行一天就卡死。
1、登录服务器, 查看运存使用信息(free -h):
基本用尽,系统卡死。available这里是不准确的,包含了,buff/cache,即运行中的缓存,也是被使用的,但是可以释放。
这里主要看free,133M显然是么没有了,而userd1.6G也属于,tomcat下一个java程序的所需的运存的正常值。
2、查看 cpu 实施运行 (top )
/
3、查看磁盘空间
Swap: 0B 0B 0B
[root@iz2zeezo12o4o98ficd42sz apache-tomcat-8.0.39]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 18G 20G 48% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 288K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 380M 0 380M 0% /run/user/0
[root@iz2zeezo12o4o98ficd42sz apache-tomcat-8.0.39]#
分析:内存用尽,磁盘无事,运存正常。
解决措施一 优化程序代码,每小时一次的任务改为一天(视情况而定,这里开发环境改为正式环境没有考虑实际业务)
两天后继续挂掉。
解决措施二 定时清理buff/cache。
参考 https://blog.csdn.net/yy17706753/article/details/103814812
主要内容:清理命令 sync && echo 3 > /proc/sys/vm/drop_caches
写入 linux系统任务,执行:crontab -e
然后在配置文件中加入 0 0 * * * sync && echo 3 > /proc/sys/vm/drop_caches
执行crontab -l 查看刚添加的定时器是否成功。
运行一周,每天free -h 查看运行状态,发现free每天都在变小,尽管每天清理buff/cache,一周后发现free又变成133M。
解决措施三 定时重启tomcat。
参考 https://www.cnblogs.com/sxdcgaq8080/p/10730633.html
主要内容:
1、新建脚本文件tomcat.sh touch tomcat.sh // 名字随意,注意创建的路径,待会要用到。
2、vi tomcat.sh
#!/bin/bash
. /etc/profileexport JAVA_HOME=/usr/local/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jretomcatPath="/backup/tomcat7"
binPath="$tomcatPath/bin"
echo "[info][$(date +'%F %H:%M:%S')]正在监控tomcat,路径:$tomcatPath"
pid=`ps -ef|grep java | grep catalina | awk '{print $2}'`
if [ -n "$pid" ]; then
echo "[info][$(date +'%F %H:%M:%S')]正在运行的tomcat进程为:$pid"
echo "[info][$(date +'%F %H:%M:%S')]tomcat已经启动,准备使用shutdown命令关闭..."
$binPath"/shutdown.sh"
sleep 2
pid=`ps -ef|grep java | grep catalina | awk '{print $2}'`
if [ -n "$pid" ]; then
echo "[info][$(date +'%F %H:%M:%S')]使用shutdown命令关闭失败,准备kill进程..."
kill -9 $pid
echo "[info][$(date +'%F %H:%M:%S')]kill进程完毕!"
sleep 1
else
echo "[info][$(date +'%F %H:%M:%S')]使用shutdown命令关闭成功!"
fi
else
echo "[info][$(date +'%F %H:%M:%S')]tomcat未启动!"
fi
echo "[info][$(date +'%F %H:%M:%S')]准备启动tomcat..."
$binPath"/startup.sh"
3、修改脚本文件tomcat.sh 可操作权限。
chmod 777 tomcat.sh
4、加入linux系统定时任务。
crontab -e
编辑加入 0 0 * * * /opt/tomcat.sh 每天凌晨重启。
5、先测试一下 tomcat.sh >> sh tomcat.sh tail -f catalinca.out 发现启动成功。ok
[root@iz2zeezo12o4o98ficd42sz opt]# sh tomcat.sh
[info][2020-05-11 10:54:20]正在监控tomcat,路径:/opt/apache-tomcat-8.0.39
[info][2020-05-11 10:54:20]正在运行的tomcat进程为:25301
[info][2020-05-11 10:54:20]tomcat已经启动,准备使用shutdown命令关闭...
Using CATALINA_BASE: /opt/apache-tomcat-8.0.39
Using CATALINA_HOME: /opt/apache-tomcat-8.0.39
Using CATALINA_TMPDIR: /opt/apache-tomcat-8.0.39/temp
Using JRE_HOME: /usr/java/jdk1.8.0_111/jre
Using CLASSPATH: /opt/apache-tomcat-8.0.39/bin/bootstrap.jar:/opt/apache-tomcat-8.0.39/bin/tomcat-juli.jar
[info][2020-05-11 10:54:23]使用shutdown命令关闭失败,准备kill进程...
[info][2020-05-11 10:54:23]kill进程完毕!
[info][2020-05-11 10:54:24]准备启动tomcat...
Using CATALINA_BASE: /opt/apache-tomcat-8.0.39
Using CATALINA_HOME: /opt/apache-tomcat-8.0.39
Using CATALINA_TMPDIR: /opt/apache-tomcat-8.0.39/temp
Using JRE_HOME: /usr/java/jdk1.8.0_111/jre
Using CLASSPATH: /opt/apache-tomcat-8.0.39/bin/bootstrap.jar:/opt/apache-tomcat-8.0.39/bin/tomcat-juli.jar
查看 运存情况 free -h
[root@iz2zeezo12o4o98ficd42sz apache-tomcat-8.0.39]# free -h
total used free shared buff/cache available
Mem: 3.7G 1.5G 1.7G 292K 576M 2.0G
Swap: 0B 0B 0B
很好。
最终方案 :每天凌晨重启,每天中午十二点,清除buff/cache 。