查找高内存进程并杀死

4 篇文章 0 订阅

思路:

  • 先查询出高内存的进程,再循环杀死

代码(killPid.sh):

#!/bin/sh
#添加本地执行路径
#source /etc/profile
#本文件为定时清理高内存的脚本文件,结合自动重启脚本,保证系统脚本能在一直在允许的内存范围内运行

nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`

echo ""
echo "$nowtime 开始检查"

#查询步骤思路:
#步骤1:先查出指定参数进程列表  “ps -e -o 'user,pid,args,tid,time,%mem,cmd'”
#步骤2:根据实际内存排序 “--sort -rsz”
#步骤3:取前10条数据
#
#得到初始数据:
#USER       PID COMMAND                       TID     TIME %MEM CMD
#root     16004 /www/server/php/74/bin/php  16004 00:00:09 16.2 /www/server/php/74/bin/php SwReptiles.php
#root      3077 /www/server/php/74/bin/php   3077 00:28:12 15.1 /www/server/php/74/bin/php Swver_v7.php
#
#步骤4:运用awk命令
#步骤5:对数据判断第6列的数据要大于15且小于50(因为这列是内存,可以随意定义允许的大小范围),且第七列等于  “/www/server/php/74/bin/php”
#步骤6:格式化只打印指定的列 第2列 第6列 第7列 第8列
#
#最终得到数据:
#16004 16.2 /www/server/php/74/bin/php SwReptiles.php
#3077  15.1 /www/server/php/74/bin/php Swver_v7.php
#
#其中 16004和3077为进程id(即PID),16.2和15.1为占用内存(%)


listarr=`ps -e -o 'user,pid,args,tid,time,%mem,cmd' --sort -rsz | head -10 |awk '$6>15 && $6<50 && $7=="/www/server/php/74/bin/php" {printf "%-18s %-20s %-20s %-80s\n",$2,$6,$7,$8}'`

#echo $listarr

OLD_IFS="$IFS"   #定义一个变量为默认IFS
IFS=$'\n'        #设置默认IFS为换行符
m=0

for id in $listarr
do
	m=`expr $m + 1`
	IFS="$OLD_IFS"

	n=0
	for var in $id
	do
		arr[$n]=$var 
		n=`expr $n + 1`
	done

	echo ""

	if [ ${#arr[@]} == 4 ]
	then

		echo "start killed PID "${arr[0]}

		echo "清除:"${arr[2]}" "${arr[3]}

		`kill ${arr[0]}`

		echo "kill end"

	else
		echo "获取到不正常的数据"
		echo “${#arr[@]}”

	fi

	echo ""

	IFS=$'\n'

done

if [ $m == 0 ]
then
	echo "没有需要kill的进程--"
fi

endtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`

echo "$endtime 检测完成"


IFS="$OLD_IFS"

可以结合宝塔定时器:

cd /www/wwwroot/study/
sh killshell.sh >>log_killshell.log 2>&1

个人博客地址:tper_pdy:查找高内存进程并杀死

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值