Linux下实现脚本监测特定进程占用内存情况
Linux系统下,我们可以利用以下命令来获取特定进程的运行情况:
cat /proc/$PID/status
其中PID是具体的进程号,这个命令打印出/proc/特定进程/status文件的内容,信息比较多,包含了物理内存/虚拟内存的使用状况,监控进程是否有内存泄露的问题,一般查看进程占用物理内存的情况:
VmRSS: xxxkB
可以采用grep命令过滤出我们需要的信息:
cat /proc/$PID/status | grep RSS >> "$LOG" #过滤包含RSS的行,并且重定向到参数LOG表示的文件
由于PID号需要通过进程名获取,同样使用grep命令过滤出我们指定进程的进程号:
ps | grep $PROCESS | grep -v 'grep' | awk '{print $1;}'#$PROCESS表示进程名字
再设置一个循环,每十秒获取一次信息并写入指定文件,完整的脚本如下:.
#!/bin/bash PROCESS=进程名
LOG="/mnt/memlog.txt" sleep #删除上次的监控文件
if [ -f "$LOG" ];then
rm "$LOG"
fi #过滤出需要的进程ID
PID=$(ps | grep $PROCESS | grep -v 'grep' | awk '{print $1;}') while [ "$PID" != "" ]
do
cat /proc/$PID/status | grep RSS >> "$LOG"#过滤出VmRSS行
sleep
PID=$(ps | grep $PROCESS | grep -v 'grep' | awk '{print $1;}')
done
范例2
shell脚本1.
#!/bin/bash
pid=$ #获取进程pid
echo $pid
interval= #设置采集间隔
while true
do
echo $(date +"%y-%m-%d %H:%M:%S") >> proc_memlog.txt
cat /proc/$pid/status|grep -e VmRSS >> proc_memlog.txt #获取内存占用
cpu=`top -n -p $pid|tail -|head -|awk '{ssd=NF-4} {print $ssd}'` #获取cpu占用
echo "Cpu: " $cpu >> proc_memlog.txt
echo $blank >> proc_memlog.txt
sleep $interval
done
调用方式
$ sh shellName.sh [pid]
#exp:
sh monitor.sh 1234
脚本1-meminfo.sh:
#!/bin/bash
interval=
if [ "$1" != "" ]
then
interval=$
fi
echo "检查时间间隔(单位秒):"$interval
datetime=`date +'%Y%m%d'`
echo""> /home/info/info-$datetime
while :
do
echo `date +'%Y%m%d %H:%M:%S'` >> /home/info/info-$datetime
cat /proc/meminfo | grep -E 'MemTotal|MemFree|Cached' |grep -v SwapCached|xargs >>/home/info/info-$datetime
top -b -d -n |grep -E "PID.*USER|load|Cpu|Data" >> /home/info/info-$datetime
sleep $interval
echo "-------------------------------------" >> /home/info/info-$datetime
done
注释:
第2-5行:设定一个内存监测时间间隔,如果用户输入,则为用户输入的值,如果用户没有输入,则默认为60s监测一次($1为我们执行程序是给程序的第一个参数)
第8行:datetime=date +'%Y%m%d' 通过date命令获取系统时间,并赋给datetime。变量date命令格式:date [选项]… [+格式]。
注意:一定要加反引号(),反引号在Linux中起着命令替换的作用。写成单引号和双引号会把命令当成字符串输出的哟!
第13行:首先查看meminfo文件中的内容,通过管道传递给grep命令,通过-E选项筛选出包含MemTotal或MemFree或Cached的内容(grep -E 选项可以用来扩展选项为正则表达式),并传递给下一个grep命令,通过-v选项排除掉包含SwapCached的内容,最后通过xargs将内容输出到文件(xargs将多行变成了单行,见下图)。

第14行:通过top查看内存使用情况,并通过grep过滤后输出到文件

运行脚本:./meminfo.sh [args1]
最后输出结果:cat /home/info/info-20170629

http://www.cnblogs.com/franjia/p/4384362.html
http://man.linuxde.net/xargs
脚本2
这个程序只是监测了top中的RES值,输出简单,并且可以在内存不在变化时自动停止监测(不过这个也有弊端,因为有些程序不是一直稳定增长的,很可能稳定一下,又增长了,这时候程序就停了)。.
同时会打屏输出:
#截取top的内存使用数
#如果文件存在,重命名
if [ -a memory.txt ]
then
mv memory.txt memory_at_`date +%H:%M:%S`.txt
fi
#如果没有输入参数,默认60s检查一次
if [ $# -eq ]
then
DREAM=
else
DREAM=$
fi
echo "检查内存时间间隔(秒):${DREAM}"
#当前内存数
RES_NOW=
#上一次内存数
RES_BEF=
#一致时退出
while [ $RES_NOW -ne $RES_BEF ]
do
RES_BEF=$RES_NOW
#取现在内存
RES_NOW=$(top -d -n |grep 'DataAccessEngin'|cut -d " " -f )
TIME=`date +'%y%m%d %H:%M:%S'`
#输出
echo "${TIME}进程使用内存数=[$RES_NOW]"
echo "${TIME} ${RES_NOW}">>memory.txt
sleep $DREAM
done echo "结束"
输出结果:

同时会打屏输出:

Linux下实现脚本监测特定进程占用内存情况的更多相关文章
- Linux的php-fpm优化心得-php-fpm进程占用内存大和不释放内存问题(转)
原文地址:https://wzfou.com/php-fpm/ 最近发现博客的内存老是隔三差五地被“吃掉”了,登录到后台后偶尔会出卡顿的情况,一开始怀疑是Swap不够导致的,于是给VPS主机增加了几个 ...
- linux下如何获取某一进程占用的物理内存和虚拟内存
首先,ps -A查看你所查看进程的进程号 ps -A 加入进程号为pid 那么使用如下脚本,可以打印该进程使用的虚拟内存和物理内存: root@Storage:/mnt/mtd# cat rss.sh ...
- linux下shell脚本执行jar文件
最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- 万答#3,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 问题1,有推荐的MGR运行最佳配置参考吗 在「3306π」社区广州站5月22日的分享会上,万里数据库CTO娄帅给出了他建议 ...
- linux下如何批量杀JAVA进程或某个进程方法
linux下如何批量杀JAVA进程或某个进程方法 在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killal ...
- linux如何查看端口被哪个进程占用
1.lsof -i:端口号 2.netstat -tunlp|grep 端口号 都可以查看指定端口被哪个进程占用的情况 工具/原料 linux,windows xshell 方法/步骤 [ ...
- linux如何查看端口被何进程占用
1.lsof -i:端口号 2.netstat -tunlp|grep 端口号 都可以查看指定端口被哪个进程占用的情况 工具/原料 linux,windows xshell 方法/步骤 [ ...
- Linux中查看进程占用内存的情况【转】
转自:http://hutaow.com/blog/2014/08/28/display-process-memory-in-linux/ Linux中查看某个进程占用内存的情况,执行如下命令即可,将 ...
随机推荐
- OpenGL ES 3.0顶点着色器(二)
#version es uniform mat4 u_mvpMatrix; in vec4 a_position; in vec4 a_color;out vec4 v_color;void main ...
- Android 演示 ViewPager
本文内容 环境 项目结构 演示 1:PagerTitleStrip 演示 2:PagerTabStrip 演示 3:ViewPager 和动态 Fragment 下载 Demo 环境 Windows ...
- 微信小程序 - 弹出层组件
需要的可以下载示例:maskalert
- SQL中Union和UnionAll的使用
SQL中Union和UnionAll的使用 1.建立一个Student表 ,如下: 2.建立一个Teacher表,如下: 3.使用Union,将去重并组合表,效果: 4.使用Union All,不去重 ...
- 神器phpstorm功能具体解释
phpstorm包括了webstorm的所有功能,更可以支持php代码. PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提供用户效率,可深刻理解用户的编码,提供智能代码补全,高速导航以及即 ...
- SWF运行时判断两个DisplayObject是否同个类型,属于flash professional库中的同一个元件
一般我们判断两个实例对象是否同样的类型,可以用typeof得到对象类型,然后用==号比较. typeof适用于原生类型. 而对于自定义类型,虽然typeof得到的都是Object,但还有更强的招数:g ...
- 【Linux】命令写在文件中并调用awk -f
我们在使用awk命令的时候,有时候命令特别长,在终端写出来格式太乱,难以阅读,以下是一个将命令写在文件中,并使用awk调用的具体案例 1.现在有文件file3.txt,内容如下: 2.ak2.awk脚 ...
- 关于java线程的daemon的认识
在 JAVA中的CountDownLatch.CyclicBarrier.Semaphore的简单测试 这文章里说到了线程的daemon问题,特写一篇来分析一下. 上代码: package com.y ...
- 转 安装Nginx 1.2.0+PHP 5.4.3(FastCGI)+MySQL 5.5.24
硬件环境:Dell PowerEdge 1950,4核Intel(R) Xeon(R) CPU E5410 @ 2.33GHz4G内存 系统环境:CentOS release 5.2,内核版本: 2 ...
- LVM逻辑卷管理测试——创建逻辑卷
虚拟机里再添加两块硬盘,如下所示: 启动系统后,我们可以看到新添加的两块硬盘为/dev/sdb和/dev/sdc.每个2GB. [root@lxjtest ~]# fdisk -l Disk /dev ...