linux系统升级和巡检
linux系统升级以及linux操作系统中系统基本信息的检查、文件系统和磁盘信息的检查、内存、cpu、进程信息的检查、定时任务的检查、网络、流量的检查脚本编写方法。
步骤1 linux系统升级
1、查看当前系统使用的版本信息
2、查看当前软件源是否可用yum repolist all
Centos-Base.repo需在/etc/yum.repo.d目录下
3、然后执行yum update直接进行系统升级
4、升级的过程会比较慢,耐心耐心等待即可
5、升级完成后再次查看系统版本发现已经更新到最新
步骤2 系统基本信息的检查
1、操作系统类型
uname
2、操作系统得版本号信息
cat /etc/redhat-release
3、系统内核
uname -r
4、服务器当前运行时间date
5、服务器最后重启时间
uptime
6、服务器主机名称
hostname
步骤3 文件系统和磁盘信息的检查
linux下使用df -TPh查看硬盘使用率:
去掉Filesystem行,tmpfs行(tmpfs是一种基于内存的文件系统) ,获取硬盘名和使用率:
步骤4 内存、cpu、进程信息的检查
1、内存信息检查
\#!/bin/bash
\#系统分配的区总量
mem_total=`free-m|awk 'NR==2'|awk '{print$2}'`
\#当前剩余的大小
mem_free=`free-m|awk'NR==3'|awk'{print$4}'`
\#当前已使用的used大小
mem_used=`free-m|grepMem|awk'{print$3}'`
if(($mem_used!=0));then
\#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
mem_per=0`echo"scale=2;$mem_free/$mem_total"|bc`
DATA="$(date-d"today"+"%Y-%m-%d-%H-%M")freepercentis:$mem_per"
echo$DATA>>/var/log/mem_detect.log
\#设置的告警值为20%(即使用超过80%的时候告警)。
mem_warn=0.20
\#当前剩余百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0)
mem_now=`expr$mem_per\>$mem_warn`
\#如果当前使用超过80%(即剩余小于20%,上面的返回值等于0),释放内存
if(($mem_now==0));then
sync
echo3>/proc/sys/vm/drop_caches
fi
fi
2、cpu信息检查
1)用uptime命令查看当前负载情况(1分钟,5分钟,15分钟平均负载情况)在苹果公司的Mac电脑上也适用
\# uptime
15:43:59 up 186 days, 20:04, 1 user, load average: 0.01, 0.02, 0.00
"load average"意思分别是1分钟、5分钟、15分钟内系统的平均负荷。
(1) 主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。
(2) 如果15分钟内,(系统负荷除以CPU核心数目之后的)平均负荷大于1.0,表明问题持续存在,不是暂时现象。
(3) 当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
(4) 当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
(5) 当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。
假设你的电脑只有1个CPU。如果你的电脑装了2个CPU,意味着电脑的处理能力翻了一倍,能够同时处理的进程数量也翻了一倍。
2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。
2)查看服务器cpu的总核数
\# grep -c 'model name' /proc/cpuinfo
cat /proc/cpuinfo
3)截取服务器1分钟、5分钟、15分钟的负载情况
\# uptime | awk '{print $8,$9,$10,$11,$12}'
load average: 0.01, 0.02, 0.00
4)查看截取15分钟的平均负载
\# uptime | awk '{print $12}' (用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空了。而用$NF表输出最后一段的内容)
\# uptime | awk '{print $NF}'
5)编写系统负载监控的脚本文件:
\# vim /scripts/load-check.sh
\#!/bin/bash
\#使用uptime命令监控linux系统负载变化
\#取系统当前时间(以追加的方式写入文件>>)
date >> /scripts/datetime-load.txt
\#提取服务器1分钟、5分钟、15分钟的负载情况
uptime | awk '{print $8,$9,$10,$11,$12}' >> /scripts/load.txt
\#逐行连接上面的时间和负载相关行数据(每次重新写入文件>)
paste /scripts/datetime-load.txt /scripts/load.txt > /scripts/load_day.txt
\# chmod a+x /scripts/load-check.sh
3、进程信息检查
在对进程进行监控时,我们一般需要得到该进程的 ID,进程 ID 是进程的唯一标识,但是有时可能在服务器上不同用户下运行着多个相同进程名的进程。
下面的函数 GetPID 给出了获取指定用户下指定进程名的进程 ID 功能(目前只考虑这个用户下启动一个此进程名的进程),它有两个参数为用户名和进程名,它首先使用 ps 查找进程信息,同时通过 grep 过滤出需要的进程,最后通过 sed 和 awk 查找需要进程的 ID 值(此函数可根据实际情况修改,比如需要过滤其它信息等)。
对进程进行监控
function GetPID #User #Name
{
PsUser=$1
PsName=$2
pid=`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbx\n|grep -v tail|grep -v start|grep -v stop |sed -n 1p |awk '{print $1}'`
echo $pid
}
示例演示:
1)源程序(例如查找用户为 root,进程名为 TestApp 的进程 ID)
PID=`GetPID root TestApp`
echo $PID
2)结果输出
11426
3)结果分析
从上面的输出可见:11426 为 root 用户下的 TestApp 程序的进程 ID。
4)命令详解
ps: 查看系统中瞬间进程信息。 参数:
-u< 用户识别码 > 列出属于该用户的程序的状况,也可使用用户名称来指定
-p< 进程识别码 > 指定进程识别码,并列出该进程的状况
-o 指定输出格式
grep: 用于查找文件中符合字符串的当前行。 参数:
-v 反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
sed: 一个非交互性文本编辑器,它编辑文件或标准输入导出的文件,一次只能处理一行内容。 参数:
-n 读取下一个输入行,用下一个[命令](https://www.linuxcool.com/)处理新的行而不是用第一个命令
p 标志 打印匹配行
awk:一种编程语言,用于在 linux/unix 下对文本和数据进行处理。除了在命令行中使用,它更多是作为[脚本](https://
www.linuxcool.com/)来使用。 参数:
-F fs or –field-separator fs :指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式,如 -F:。
PS:有时有可能进程没有启动,下面的功能是检查进程 ID 是否存在,如果此进程没有运行输出:
检查进程是否存在
if [ "-$PID" == "-" ]
then
{
echo "The process does not exist."
}
fi
shell脚本查看linux系统cpu和内存占用率排行前十的进程
!/bin/bash
echo "CPU占用率前十的进程如下"
ps -eo user,pid,pcpu,pmem,args --sort=-pcpu | head -n 10
echo "内存占用率前十的进程如下"
ps -eo user,pid,pcpu,pmem,args --sort=-pmem | head -n 10
-
步骤5 定时任务的检查
关闭定时任务命令:
service crond stop
启动定时任务命令:
步骤6 网络、流量的检查
sar -n DEV 1 2
sar命令包含在sysstat工具包中,提供系统的众多统计数据。其在不同的系统上命令有些差异,某些系统提供的sar支持基于网络接口的数据统计,
也可以查看设备上每秒收发包的个数和流量。
命令后面1 2 意思是:每一秒钟取1次值,取2次。
DEV显示网络接口信息
另外,-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL ,其代表的含义如下:
1)DEV显示网络接口信息。
2)EDEV显示关于网络错误的统计数据。
3)NFS统计活动的NFS客户端的信息。
4)NFSD统计NFS服务器的信息。
5)SOCK显示套接字信息。
6)ALL显示所有5个开关。
[sre@CDVM-213017031 ~]$ sar -n DEV 1 2
Linux 2.6.32-431.el6.x86_64 (CDVM-213017031) 05 /04/2017 _x86_64_ (4 CPU)
08:05:30 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:05:31 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:05:31 PM eth0 1788.00 1923.00 930.47 335.60 0.00 0.00 0.00
08:05:30 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:05:32 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
08:05:32 PM eth0 1387.00 1469.00 652.12 256.98 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 1587.50 1696.00 791.29 296.29 0.00 0.00 0.00
参数说明:
IFACE:LAN接口
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包
rxerr/s:每秒钟接收的坏数据包
txerr/s:每秒钟发送的坏数据包
coll/s:每秒冲突数
rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
txcarr/s:发送数据包时,每秒载波错误数
rxfram/s:每秒接收数据包的帧对齐错误数
rxfifo/s:接收的数据包每秒FIFO过速的错误数
txfifo/s:发送的数据包每秒FIFO过速的错误数
这种方式简单,直观,推荐使用。
实时监控脚本
#!/bin/bash
ethn=$1
while true
do
RX_pre=$(cat /proc/net/dev| grep ens | sed 's/:/ /g'| awk '{print $2}')
TX_pre=$(cat /proc/net/dev| grep ens | sed 's/:/ /g'| awk '{print $10}')
sleep 1
RX_next=$(cat /proc/net/dev| grep $ethn | sed 's/:/ /g'| awk '{print $2}')
TX_next=$(cat /proc/net/dev| grep $ethn | sed 's/:/ /g'| awk '{print $10}')
clear
echo -e "\t RX `date +%k:%M:%S` TX"
RX=$((${RX_next}-${RX_pre}))
TX=$((${TX_next}-${TX_pre}))
if [[ $RX -lt 1024 ]];
then
RX="${RX}B/s"
elif [[ $RX -gt 1048576 ]];
then
RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
else RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
fi
if [[ $TX -lt 1024 ]];
then
TX="${TX}B/s"
elif [[ $TX -gt 1048576 ]];
then
TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
else
TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
fi
echo -e "$ethn \t $RX $TX "
done
此脚本不需要额外再安装软件,并且可自定义欲查看接口,精确到小数,可根据流量大小灵活显示单位,默认采集间隔为1秒。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)