Linux 通过Shell 查找问题进程 [转]

背景介绍:

最近公司服务器不太稳定,总是在凌晨某个时段突发高负载情况,因为客观环境比较复杂,所以很难猜测出到底是哪个进程出现了问题,加之故障发生时,通常我在睡觉,等我被报警短信吵醒,通过公司 VPN 登上服务器的时候,故障多半已经消失了!不过这个问题难不倒一个合格的 DevOps,让我写个 Shell 搞定它。

实际上解决问题的思路非常简单:通过 CRON 每分钟运行一个 Shell,查询系统负载,一旦发现异常,就通过「ps」命令保存进程快照,也可以进一步保存负载,内存等相关的数据,但通常没有必要,因为通过「sar」命令很容易拿到。相关 Shell 代码如下:

#/bin/bash

LOAD=$(awk ‘{print $1}‘ /proc/loadavg)
CPUNUM=$(grep -c processor /proc/cpuinfo)

if [ $(echo "$LOAD > $CPUNUM" | bc) = 1 ]; then
    RESULT=$(ps -eo pcpu,pmem,user,args | awk ‘$1 > 0‘ | sort -nr)
    if [ -n "$RESULT" ]; then
        echo "$RESULT" > /var/log/ps.$(date +"%Y%m%d%H%M")
    fi
fi

Check Error PID

需安装BC软件:yum -y install bc

转载:http://huoding.com/2013/01/30/225

时间: 2024-12-19 19:39:39

Linux 通过Shell 查找问题进程 [转]的相关文章

Linux中用 grep查找特定进程,屏蔽grep进程本身(也就是不出现grep --color=auto)

日常操作linux 中,通常在使用 ps命令后 用管道连接 查询特定进程会显示 grep进程本身. 如下: 1 [[email protected] ~]# ps -ef|grep gs4 2 root 6284 5879 0 14:30 pts/0 00:00:00 grep --color=auto gs4 1 [[email protected] gs4]# ps axu |grep gs4 2 root 2480 0.0 0.0 112728 972 pts/0 S+ 14:20 0:0

linux shell脚本监控进程是否存在

用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货:    #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]thenecho "start process....."elseecho "runing....."fi #####processString 表示进程特征字符串,能够查询到唯一进程的特征字符串0表示存在的$? -ne 0 不存在,$? -eq 0 存在 定时执行:

在Linux中通过Top运行进程查找最高内存和CPU使用率

按内存使用情况查找前15个进程,在批处理模式下为“top” 使用top命令查看有关当前状态,系统使用情况的更详细信息:正常运行时间,负载平均值和进程总数. 分类:Linux命令操作系统 2016-07-27 00:00:00 类似于前面的技巧有关找出由RAM和CPU使用率最高的进程 ,还可以使用top命令来查看相同的信息. 也许有相比前一个这种方法的一个额外的优势:顶级的“头”,提供有关当前状态和使用该系统的额外信息:正常运行时间,平均负载和进程总数,仅举几例例子. 按顶部查找按内存使用的进程

Centos Linux 常用shell操作命令

文件处理命令:ls 功能描述:显示目录文件 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 语法: ls 选项[-ald]  [文件或目录] -a 显示所有文件,包括隐藏文件 -l 详细信息显示 -d 查看目录属性 $ ls –a > dir.txt //将ls –a命令执行结果输出到dir.txt文件. $ ls –a >> dir.txt //将ls –a命令执行结果附加到dir.txt文件之后. 文件处理命令:cd 功能描述:切换目录 命令英文原意:cha

linux bash shell常用命令整理

使用这些命令几乎能完成所有想要做的任务 命令 描述 alias 为指定命令定义一个别名 bg 以后台模式恢复作业的运行 bind 将键盘序列绑定到一个readline函数或宏 break 退出for.while.select.until循环 builtin 执行指定的shell內建命令 cd 将当前目录切换为指定的目录 caller 返回所有活动子函数调用的上下文 command 执行指定的命令,而不用通常的shell查找 compgen 为指定单词生成可能的补全匹配 complete 显示指定

Linux常用指令---ps(查看进程)

Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令. 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执

Linux常用shell命令(学习小结)

1. man 对你熟悉或不熟悉的命令提供帮助解释 eg:man ls 就可以查看ls相关的用法 注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行. 2. ls 查看目录或者文件的属性,列举出任一目录下面的文件 eg: ls /usr/man ls -l a.d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件(link) b.表示文件或者目录许可权限.分别用可读(r),可写(w),可运行(x). 3. cp 拷贝文

linux自动启动shell和init概述(fedora use systemmd now!!!)

linux运行级别  linux启动之后会在一个级别运行,下面列出了这些运行级别: 0 系统停止 1 单用户系统,不需要登陆 2 多用户系统但不支持NFS,命令行模式登陆 3 完整多用户模式,命令行模式登陆 4 未用 5 X11图形模式,图形模式登陆 6 重新启动系统 这些可以在/etc/initab文件中可以看到0-6级的注释,代码段如下: # Default runlevel. The runlevels used by RHS are: #   0 - halt (Do NOT set i

Linux命令:kill命令 终止进程

Linux中的kill命令用来终止指定的进程(terminate a process)的运行 通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,采用编号为15的TERM信号.TERM信号将终止所有不能捕获该信号的进程.对于那些可以捕获该信号的进程就要用编号为9的kill信号,