LINUX检查一个进程内存增长的脚本

简介: LINUX检查一个进程内存增长的脚本

 内存泄露很难查。


 1、内存有没有泄露?


 2、内存在哪里泄露?


 为了解决第一个问题,吾绞尽脑汁,写了一个脚本,检查特定程序的内存增长。即只要增长就会输出。分享出来供大家参考。


# ps -A | grep ${PROCESS_NAME} | awk '{print $1}'
get_pid()
{
    process_name=$1
    text=`ps -A | grep $process_name`
    # 去掉开头的空格
    text=`echo $text | sed -e 's/^[ \t]*//g'`
    #没有这个进程
    if [ "${text}" = "" ] ; then
        pid=0
        echo ${pid}
        return 0
    fi
    # 得到进程号之后的空格
    pos=`expr index "$text" " "`
    pos=`expr $pos - 1`
    #截取进程号
    pid=`echo $text | cut -c 1-$pos`
    #echo pid=---$pid+++
    echo ${pid}
    return 0
}
# cat /proc/${pid}/status | grep VmRSS | awk '{print $2}'
get_mem()
{
    process_id=$1
    text=`cat /proc/${process_id}/status | grep VmRSS`
    #没有这个进程
    if [ "${text}" = "" ] ; then
        memory=0
        echo ${memory}
        return 0
    fi
    pos=`expr index "$text" " "`
    text=`echo $text | cut -c $pos-`
    pos=`expr index "$text" " "`
    pos=`expr $pos - 1`
    memory=`echo $text | cut -c 1-$pos`
    #echo memory=---$memory+++
    echo ${memory}
    return 0
}
# 最好是参数传递
PROCESS_NAME="quantum6"
# 有人指点,也可以一条命令搞定:
# ps -A | grep ${PROCESS_NAME} | awk '{print $1}'
pid=$(get_pid ${PROCESS_NAME})
#没有这个进程
if [ "${pid}" = "0" ] ; then
    max_memory=0
else
    max_memory=$(get_mem ${pid})
fi
echo pid=${pid}, max_mem=${max_memory}
# 循环。如果内存增加,输出变化情况。
while [ true ] ; do
    sleep 1s
    # 得到进程号
    pid=$(get_pid $PROCESS_NAME)
    if [ "${pid}" = "0" ] ; then
        # 没找到,复位
        max_memory=0
        continue
    fi
    # 得到进程使用的内存。
    # cat /proc/${pid}/status | grep VmRSS | awk '{print $2}'
    current_memory=$(get_mem ${pid})
    if [ "${current_memory}" = "0" ] ; then
        continue
    fi
    # 如果占用内存增加了,输出
    if [ ${current_memory} -gt ${max_memory} ] ; then
        echo
        echo ---------------------------------
        date
        diff=`expr ${current_memory} - ${max_memory}`
        echo ${current_memory} - ${max_memory} = ${diff}
        max_memory=${current_memory}
    fi
done


输出如下:


pid=15960, mem=3650724
---------------------------------
2019年 01月 07日 星期一 09:34:57 CST
3652832 - 3650724 = 2108
^C[quantum6@gh4ai gh4ai]$ ./check_mem.sh 
pid=15960, mem=3650724
---------------------------------
2019年 01月 07日 星期一 09:35:32 CST
3651776 - 3650724 = 1052
---------------------------------
2019年 01月 07日 星期一 09:35:42 CST
3652832 - 3651776 = 1056
目录
相关文章
|
3天前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
47 25
|
11天前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
109 28
|
1月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
120 27
|
2月前
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
155 48
|
2月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
149 32
|
2月前
|
存储 Linux 网络安全
linux应急响应检查脚本
通过这个脚本,可以快速收集系统的关键信息,有助于在发生问题时进行及时的应急响应和分析。
141 34
|
2月前
|
缓存 NoSQL Linux
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
66 3
|
2月前
|
缓存 Linux
Linux查看内存命令
1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h • -h 选项:以易读的格式(如GB、MB)显示内存大小。 输出示例: total used free shared buff/cache available Mem: 15Gi 4.7Gi 4.1Gi 288Mi 6.6Gi 9.9Gi Swap: 2.0Gi 0B 2.0Gi • to
100 2
|
1天前
|
Arthas 监控 Java
Arthas memory(查看 JVM 内存信息)
Arthas memory(查看 JVM 内存信息)
25 6
|
1月前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
179 29
JVM简介—1.Java内存区域
下一篇
oss创建bucket