Linux 系统工程师的日常工作内容
1.操作系统状态监控
每天登陆系统查看系统运行的负荷如何,有无报错日志或报警日志。
2.操作系统故障排除
依据操作系统故障日志分析出现该报警或报错的原因,从而解决问题,保证操作系统的高可用性。
3.服务器状态确认
服务器上除了跑着操作系统,必然会安装一些应用程序或数据库,运维工程师每天需要查看linux系统上运行着的应用程序或数据库状态是否正常。
4.备份
运维工程师的看家本事,数据库备份和恢复,一般来说只要给数据库制定了备份策略它会自己备份,你只需要监控备份任务是否执行了就可以。
5.服务器调优
这个要求就比较高了,linux随着使用时间的增长,状态会有所下降,运维工程师有能力的可以对操作系统及数据库进行性能调优,保证系统处于一个最佳状态。
性能测试监控——CPU
为了全面详细的分析系统运行状态,发现隐藏的性能瓶颈。性能测试期间,全面监视CPU运行状态是很有必要的。
本文侧重分析性能测试期间需要监控的CPU运行状态指标,对比相关查询命令的优劣,并给出最终的shell脚本。
关于各指标的详细含义,见附件。
一、监控指标项及其理想值
1、load average,平均每个逻辑内核不能高于0.7。
load average大于1,表示系统中存在处于等待状态的任务,任务竞争CPU容易导致性能降低,时延增大,甚至进入恶性循环。在一个合理的load average下加压,监测CPU使用率的变化情况,可以帮助发现I/O、内存、网络中的性能瓶颈。
2、CPU总占有率。总占有率小于70%,其中以%usr为主,%sys和%iowait不能太高。
3、各逻辑内核CPU占有率持平。
4、执行相同任务的进程CPU占有率持平。
5、进程状态合理,僵死进程不能太多。
二、数据收集
数据收集的重点与核心在于:
详实而又不冗余,不关注无关指标,以最少的数字反应关注的指标。
有的指标项,比如各逻辑内核的CPU占有率持平,关注的是一组数据的分布特点,而不关心数据的具体值。同时,当前系统性能的瓶颈主要在I/O。数据收集期间记录全部数据的具体数值,即降低影响系统性能,又加大了后期数据处理的工作量。
故,数据收集之前,对我们所需要的数据的统计特征进行分析。
1.load average
每隔1min,5min或15min取该段时间内的load average即可。一次取1个数据。
shell命令:uptime | awk -F: '{print $NF}'|awk -F, '{print $1}'
命令解释:
uptime获取load average。
awk -F: '{print $NF}'提取1min,5min或15min 内load average的具体数值。
awk -F, '{print $1}'提取其中1个字段。
2.CPU总占有率
每隔一段时间,取当前的%usr,%sys,%iowait,%idle取值。
shell命令:mpstat|grep all
解释:mpstat的输出参数,无法自定义字段。其中部分字段是我们暂时不关注,但后续会关注。另外,剔除这些字段涉及较多的管道和文本分析,较为复杂。同时,降低了脚本的可移植性。
3.各逻辑内核CPU占有率持平
根据各逻辑内核的CPU占有率计算:跨度((max-min)/average),mdev(sqrt (平方和的平均值-平均值的平方))
命令:
mpstat -P ALL|grep -v -i ALL|grep -o -e '[0-9][0-9]*\..*\.[0-9]*[0-9]$'|awk -v col=9 -f cal.awk
其中用到了脚本 cal.awk
解释:
mpstat -P ALL|grep -v -i ALL|grep -o -e '[0-9][0-9]*\..*\.[0-9]*[0-9]$' 提取各CPU的指标的数据。
col=9,列数。
cal.awk脚本计算数据值的跨度和mdev
BEGIN {
for(i=1;i<=col;i++){
sum[i] = 0;
squsum[i] = 0;
max[i] = 0;
min[i] = 1000000;
}
}
{
for(j=1;j<=col;j++) {
tmp = $j
sum[j] += tmp
squsum[j] += tmp*tmp
if(max[j]<tmp)
max[j] = tmp
if(min[j]>tmp)
min[j] = tmp
}
}
END {
for(k=1;k<=col;k++) {
ave = sum[k]/NR
mdev = sqrt(squsum[k]/NR-ave*ave)
printf("%.2f/%.2f/%.2f/%.2f  "), ave,max[k],min[k],mdev }
}
4.执行相同任务的进程CPU占有率持平
算法同上。
命令:
# ps aux |grep nginx|grep -v grep|awk '{print $3}'|awk -v col=1 -f cal.awk ave/max/min/mdev = 2.59/3.00/0.00/0.92
三、脚本化
定时(每分钟)输出cpu运行状态信息到指定文件(cpu_yjk.log)。
为了方便后续用python进行数据分析,输出格式统一如下:
1、每次输出独占且只占用一行。
2、数据项之间以“,”分隔。
linux系统登录3、涉及统计数字的数据项,以ave/max/min/mdev格式输出计算结果
#!/bin/bash
sleepTime=60
logfile=cpu_yjk.log
if [ -f "$logfile" ];
then