步骤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 ,其代表的含义如下:
  1DEV显示网络接口信息。
  2EDEV显示关于网络错误的统计数据。
  3NFS统计活动的NFS客户端的信息。
  4NFSD统计NFS服务器的信息。
  5SOCK显示套接字信息。
  6ALL显示所有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
  
参数说明:
  IFACELAN接口
  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秒。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐