如何监控系统的资源使用?

Bash

1 前言

最近有遇到阿里云服务器死机的情况,从阿里云监控的数据可以看出为内存报警,由于没有发现阿里云的监控有提供进程的内存和CPU占用数据(目的是想知道那个进程把资源耗尽),故而自己使用命令行监视。

2 最佳实践

2.1 基本命令解析

pidstat -p ALL -r 1 5
pidstat -p ALL -r 1 5

– 参数“-p ALL”指定统计所有进程
– 参数“-r”指定统计内存占用
– 参数“-u”指定统计CPU占用
– 参数“1”声明间隔是1秒
– 参数“5”声明统计5次
基于以上,我们对数据进行选取平均值、过滤掉标题、按照第八列排序且只保留TOP 10的统计数据,

pidstat -p ALL -r 1 5 | grep Average | grep -v "Command"| sort -k 8 -r -n | head -n 10
pidstat -p ALL -u 1 5 | grep Average | grep -v "Command"| sort -k 7 -r -n | head -n 10

2.2 统计内存占率

vim ~/scripts/memStat.sh

加入如下代码,

#!/bin/bash

logfile=/var/log/memStat-`date +"%Y%m%d"`.log

echo `date` >> $logfile
echo 'Average:      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command' >> $logfile
pidstat -p ALL -r 1 5 | grep Average | grep -v "Command"| sort -k 8 -r -n | head -n 10 >> $logfile

# find `dirname $logfile` -name \*memStat-\*.log -ctime +7 -exec ls {} \;
find `dirname $logfile` -name \*memStat-\*.log -ctime +7 -exec rm -f {} \;

另外,设置完成后,我们需要使用如下命令设置计划任务调用此脚本,

crontab -e

加入如下内容,

*/1 * * * * sh ~/scripts/memStat.sh

2.2 统计CPU占用率

vim ~/scripts/cpuStat.sh

加入如下代码,

#!/bin/bash

logfile=/var/log/cpuStat-`date +"%Y%m%d"`.log

echo `date` >> $logfile
free -lh >> $logfile
echo 'Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command' >> $logfile
pidstat -p ALL -u 1 5 | grep Average | grep -v "Command"| sort -k 7 -r -n | head -n 10 >> $logfile

# find `dirname $logfile` -name \*cpuStat-\*.log -ctime +7 -exec ls {} \;
find `dirname $logfile` -name \*cpuStat-\*.log -ctime +7 -exec rm -f {} \;

另外,设置完成后,我们需要使用如下命令设置计划任务调用此脚本,

crontab -e

加入如下内容,

*/1 * * * * sh ~/scripts/cpuStat.sh
Bash
如何熟悉Base Shell的变量的间接引用?

1 前言 一个问题,一篇文章,一出故事。 笔者希望以一个变量名称去引用另一个变量,于是整理此文。 2 …

RHEL-Like
如何配置rsyncd服务?

1 前言 一个问题,一篇文章,一出故事。 由于笔者想实现文件通过rsync自动传输,但是又不想使用o …

RHEL-Like
如何用pam_google_authenticator认证模块实现SSH 2FA?

1 前言 一个问题,一篇文章,一出故事。 笔者想开启2FA以便增强SSH服务的安全性,于是便整理此文 …