第13章 linux系统管理技巧(日常运维管理技巧)

这一章的内容是核心,以后会用的几率也是很大的,只要掌握必备的基础知识,做初级系统管理员是不成问题的。

13.1监控系统的状态

作为一个运维工程师、系统管理员,如果对自己的系统不了解的话,那怎么排查问题呢?如果出现问题的话,肯定要查一下是什么问题,哪里的问题,系统的资源的耗费情况如何查看。

13.1.1使用w命令查看当前系统的负载

第一部分是系统时间,使用date命令也可以查看当前时间。

第二部分是系统运行时间

第三部分是登陆了几个用户,从下面可以看到,也可以看到登录了哪个终端。如果是网络登录的话,终端是ps/0,ps/1这些;如果是系统登录,会出现tty1,tty1- tty6是6个终端。from是可以看出从哪里来的。

load average是关键的一段,这是它的系统负载,平时用的最多的就是这一部分了。它后面跟三个数字,分别是1分钟、5分钟、15分钟内系统的平均负载值。第一个数字是单位时间内使用CPU的活动的进程有多少个,值越大说明服务器压力越大。这个数字可以是零点几,也可以是一百多,当前值是0,说明系统没有负载,就没有活动的进程,这说明服务器处于空闲的状态。这对于Linux操作系统来讲就比较浪费,它在空耗。那什么值是理想状态呢?看你有几颗CPU,这个指的是逻辑CPU,而不是物理CPU。CPU有很多类型,Intel的,AMD的,都会有几颗CPU,每颗上又会有很多逻辑CPU。查看CPU的命令如下:

cat /proc/cpuinfo,需要查看的数字是processor。如果是0,就代表有1颗;是1代表是2颗;如果有39,就代表有40颗。

这里说的是逻辑CPU,而不是物理CPU。系统上的数字是0,代表有一个CPU,用w命令查到的第一个数字是1是最好的,不闲也没什么压力。processor的最大数字是7,代表最多有8颗CPU,只要w命令查到的数字不大于8,就是可以的。[email protected]是登陆的时间,IDLE是空闲了多长时间,PCPU是使用CPU的时间,WHAT是适用的命令,后面的可以不用管它。

还有一个命令是:uptime,它和w命令的结果一样。

注:/proc/cpuinfo文件记录了CPU的详细信息。目前市场上多为2颗多核CPU,在Linux看来,它就是2*n个CPU(n为单颗物理CPU上有几核)。如果n为4,则查看这个文件时会显示8段信息,而最后一段信息的processor会显示7,查看当前系统有几个CPU,可以使用命令grep -c 'processor' /proc/cpuinfo。然后查看有几颗物理CPU时,则需要查看关键字physical id。

13.1.2用vmstat命令查看监控系统的状态

我们用w命令学会了查看负载情况,如果出现了负载值偏高的情况,如查询的数字大于CPU核数了,说明CPU不够用了。此时就需要思考CPU不够用的原因,进程在干什么,都有哪些任务在使用CPU,你可能想去查看系统的瓶颈在哪里。

可以查到CPU核数,内存,虚拟内存交换分区,io就是磁盘,系统的进程等等相关的东西。经常使用vmstat 1命令,每隔一秒输出一次状态,感觉差不多可以Ctrl C结束。

当然也可以vmstat 1 5,每隔一秒输出一次状态,输出5次结束。

我们只需要关心如下几列:

proc显示进程的相关信息:

r,是run的简写,表示系统中有多少进程是属于run的状态。如果只有一个CPU,那某一个时间点只可能有一个进程在使用CPU,其他进程都在排队。但它们那是循环的,每个进程都有机会使用CPU,都可以使用一会儿。不管是在使用还是在排队,都是处于r的状态。如果该数值长期大于服务器CPU的个数,则说明CPU资源不够用了。

b,是block的缩写,表示等待资源的进程数。b就是说进程被CPU以外的资源(硬盘或者网络)给阻断了,处于一个等待状态,卡死了,b被堵死了。比如说网速慢,进程想要给你发一个数据包,假如网速很快,只需要1秒就发完了。但是现在速度慢,可能就花了10秒钟,就是因为网速太慢,这个时候只能等网速了,这就是有多少进程在等待了。

memory显示内存的相关信息

swpd,表示切换到交换分区中的内存数量,单位为KB。以前讲分区时,有个swap交换分区,当内存不够时,系统可以把内存中的一部分数据临时放到swap空间里面去。如果这个数字不变,那还好;如果这个数字在持续不断的变化,那说明内存和交换分区在持续不断的交换数据,这就说明内存不够了。

free,buff,cache我们讲内存时,再讲这几个单词的含义。

swap显示内存的交换情况

si、so和swapd相关,如果swapd频繁变化,那他们也会相应发生变化。

si:表示有多少数据(块)是由swap交换区进入内存中的,单位为KB。i表示in,进入内存的。o表示out,so表示有多少是从内存中出来的。

io显示磁盘的情况

bi,bo是和磁盘有关系的。bi表示从块设备读取数据的量(读磁盘),单位为KB。bo表示从块设备写入数据的量(写磁盘),单位为KB。这个数据量很大,说明磁盘在频繁的读写。io相比较磁盘来说,是很慢的。如果有那么多的数据读写,肯定会造成并列增加,因为有很多进程在等待磁盘,这个是必然的。

CPU:显示CPU的使用状态

us:表示用户级别的,比如说一个操作系统,肯定不可能只运行一个系统,还有跑一些服务。比如跑了一个网站,跑了一个MySQL,网站也好,MySQL也好,肯定会占一些资源,它就会体现us这一方面了,user占用的情况。us的数字是不会超过100的,因为一共就100%。us数字表示用户下的资源占用CPU的百分比,us长期大于50就说明系统资源不够了。

sy:显示系统本身花费CPU的时间百分比。

id:表示空闲的百分比us+sy+id=100

wa:wait等待,表示I/O等待所占用CPU的时间百分比,这一列很大,说明CPU不够用了。

通过vmstat命令可以判定出系统的瓶颈,如CPU不够,内存不够,还是磁盘io太大。

13.1.3用top命令显示进程所占的系统资源

可以用top查看具体的进程。

第一行和w命令查到的是一样的,总共有多少任务,有多少运行的任务,有多少正在sleeping的任务。僵尸进程,主进程被意外终止,子进程就没人管了,就比较尴尬,没人管,只能自生自灭。

风扇转的欢,CPU很烫,说明CPU使用率很高。us长期在60%以上是对CPU没有好处的。

下面是真正需要关心的东西,默认情况下,它会按CPU百分比从高到低排序,%MEM是内存,RES是物理内存大小,单位是KB千字节。

按大小字母M,会出现按内存使用大小排序,可以看到进程使用内存的具体大小。按大小字母P,换回CPU使用大小排序。按1的话,下面会列出

所有的CPU使用情况。按字母q会推出top命令。

使用top -c命令可以查看具体的进程命令,全局的路径。

使用top -bn1命令,可以静态的一次性的把所有的信息全部显示出来。

这种用法适合在写脚本的时候用。

可以关注一下PID,比如说要杀死一个命令,可以使用PID去杀。kill PID命令就可以杀死一个进程。

USER是哪个用户运行的,PR、NI是关于优先级的,不需要过多关注。

注:使用top命令重点查看的还是下面的进程使用系统资源的详细状况。

13.1.4用sar命令监控系统状态

sar是一个非常全面的分析系统状态的命令,主要用来查看网卡的流量。它同样可以查看你的CPU、内存、磁盘的状态,它被称为linux系统中的瑞士×××,也就是它的命令非常复杂和丰富。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。

如果没有这个命令,可以通过

yum install -y sysstat来安装。

安装完这个命令,首次使用这个命令会出现如下错误,那是因为sar工具还没有生成相应的数据库文件(无需时时监控,因为不用去查询那个库文件)。

如果sar不加参数的话,它会调用系统里面保留的历史文件,

这个目录就是它生成的历史文件所在的目录,什么叫历史文件呢?因为sar有一个特性,每10分钟会把系统的状态过滤一遍,抓一边保存在文件里,这个文件就存在上面的目录里。

这个命令要想用,需要加上合适的选项和参数,如果要查看网卡的流量,需要使用如下命令:

这个用法和vmstat的用法类似,就是每隔1秒钟显示1次,总共显示10次结束。

IFACE表示网卡的名字。

rxpck/s和txpck/s表示每秒钟的包的数量,单位是个。rx是receive的简写,代表收取的,tx代表发送的。

rxkB/s这一列表示每秒收取的数据量(单位是KB)

txkB/s这一列表示每秒发送的数据量(后面几列不需要关注,阿铭老师工作这么多年,后面几列都是不超过0的,也就是都是0)

一个网站如果遭到攻击,它会发送很多的数据包给你的网站,意味着你要接受很多的数据包。量很大的话,意味着你的网卡承担不了,最终导致网络堵塞,你的网站不能打开。

那多少包合适呢?

有时候也要关注网卡是否跑满,比如你的公司买了一个机柜,分配了一些带宽(比如说100M),100M不大,如果换算成常规理解的就是12.5M/s,也不是很大。如果有几个人同时下载的话,很快就占满了。如果rxpck/s的数据包有几千是正常的,如果有几万的话,就不正常了。有几万,几十万的话,就是被攻击了。如果被攻击了,可以看rxpck/s的数据包有多少,这个不太确定,需要用抓包工具。

使用如下命令可以查看某一天的网卡流量:

sar -n DEV -f /var/log/sa/sarn,n代表具体的日期

数据在这个目录下最多保留一个月

sar -q是查看服务器在过去的某个时间的负载情况

sar -b是查看磁盘的

下面的命令是看它的读和写

13.1.5用nload命令查看网卡流量

sar命令可以查看网卡流量,但是不够直观,使用nload命令更好。nload命令默认没有安装,需要使用如下命令安装:

yum install -y epel-release;yum install -y nload

安装完运行,就会出现动态的显示网卡:

最上面一行是网卡名字以及IP地址,按向右箭头可以查看其他网卡的网络流量。输出结果分为两部分,Incoming为进入网卡的流量,Outgoing为网卡出去的流量,我们关注的当然是Curr那行的数据,其单位也可以动态自动调整,非常人性化。按q退出该界面。买的带宽是出去的带宽,如果有攻击,进来的数字就会很大。

sar的补充内容:

这个目录等到明天才会生成,sar28是可以通过cat来查看的,而sa28不能。

13.1.6监控io性能(这个是关于磁盘的,磁盘的状态的两个命令)

在日常运维过程中,除了CPU、内存外,磁盘的io也是非常重要的指标。有时候CPU、内存明明有剩余,但系统就是负载很高,我们用vmstat命令查看会发现b列或wa列比较大,那就说明系统磁盘有瓶颈。

我们在安装sysstat包时,就会安装iostat命令,它和sar属于同一个包。

iostat的用法:

也可以

要讲的是iostat -x命令,这里有一个非常重要的指标。

%util首先是一个百分比,这一列表示io等待,总之就是磁盘使用有多少时间是占用你CPU的。CPU有一部分时间是给进程处理、计算的,也有一部分是等待io的,等待磁盘读写的。如果这个数字是50%以上,就说明磁盘太差了,它非常忙碌。如果硬盘有问题,即使CPU再快,再厉害,还是存在很大的瓶颈。如果磁盘严重不行,只能更换磁盘。

如果发现磁盘io很忙,很频繁,如果想知道是哪一个进程在频繁的读写,就可以使用Iotop命令。但发现没有安装,使用yum install -y iotop安装。

它和top很像,是动态的,按排行来排。

我们看的是IO百分比

13.1.7用free命令查看内存使用情况

free命令可以查看当前系统的总内存大小以及使用内存的情况。CentOS 7系统的free命令显示结果比CentOS 6更简洁一些,但大体一致。

总共有三行,第一行是说明,第二行是内存的使用情况,第三行是交换分区的情况。

total:内存总大小

used:真正使用的实际内存大小

free:剩余物理内存大小(没有被分配,纯剩余)

shared:共享内存大小,这个不用关注

buff/cache:分配格buff/cache的内存总共有多大。

简单区分一下buff(缓冲)和cache(缓存),数据的流向不一样,所叫的名字也不一样。buff/cache都是一部分内存,内存的作用就是缓解CPU和IO(如,磁盘)的的速度差距的。可以这样理解:数据经过CPU计算,即将要写入磁盘,这是用的内存为fuff;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache。

avaliable:系统可使用内存有多大,它包含了free。linux系统为了让应用跑得更快,系统会预先预留出一部分(buff/cache)给某些应用使用,虽然这部分内存并没有真正使用,但也已经分配出去了。然而,当另外一个服务要使用更多内存时,是可以把这一部分预先分配的内存拿来用的。所以,

available=free+buff/cache

total=used+free+buff/cache

buffer和cache如此重要,系统会预先预留出一部分给buffer和cache。

使用free命令需要关注的是available这一项。

13.1.8使用ps查看系统进程

ps -elf和ps aux结果差不多

vmstat根本占用不了CPU多少时间,运行一下就sleep了。+说的是前台进程,说的是终端上的进程。

Z表示僵尸进程,这种进程不多,也会有。如果多的话,就想办法把它杀死。

<表示高优先级进程,优先级比较高,CPU先紧着给它用。

N表示低优先级进程,有Z相对,意味着它 不着急,晚一点用也没关系。

|多线程进程,线程和进程是有区别的,线程有一个大的进程组成的,一个进程里面有多个线程。概念回去查一查,进程和进程之间内存相互之间是不共享的,但线程之间使用了同一个进程的内存的区域。比如给进程分配了一个进程块,这个进程本来对这个内存是有使用权限的,但它下面的线程不管有多少,它们共享这一块内存,这就是线程的特点。多线程进程是说,进程有多个线程。

13.1.9用netstat命令查看网络状态

linux作为服务器的操作系统,服务器上会有很多服务,服务往往是和客户端相互通信的,这就意味着它要有监听端口,要有对外的通信端口。这个命令查看的就是TCP/IP通信的状态。安装一个MySQL,提供一个数据库服务,就要有一个监听端口,那么何为监听端口?正常情况下一台机器是没有任何的端口监听的,这就意味着它没有办法和其他的机器通信。你要想让其他人访问你的网站,它就需要监听一个端口,它把这个端口放开,打开一个孔。就像网卡上搞了一个小孔出来,然后远程的设备想办法和这个设备相连,数据就可以通过这个孔进入到网卡里,进入到服务器里,相互的进行通信。

端口查看命令:

l代表的是listen

sshd有两个,一个是tcp,一个是tcp6,tcp6就是Ipv6(tcp和udp的资料自行查阅,这个不作为重点)

master 25端口,发邮件的端口

第二个命令:

这个命令会查看tcp/ip状态

扩展知识:tcp/ip的三次握手,四次挥手,这个往往在面试的时候被问到

查看tcp/ip,需要关注一个值就是ESTABLISHED,如果这个值很大,说明你的系统很忙。并发连接数,就是同一时间有多少客户端在连接你,我们可以那这个数字来说明并发连接数有多少。上面说明有45个客户端和服务端进行通信,正在连接。这个是真正的通信,1000以内服务器都是能接受的。

ss -an 命令也能显示tcp/ip的状态

它有一个缺点,它不会显示进程的名字,vmstst -lntp命令可以

13.1.10linux下的抓包工具

时间: 2024-10-09 02:48:03

第13章 linux系统管理技巧(日常运维管理技巧)的相关文章

Linux日常运维管理技巧

监控系统状态 1.w/uptime查看系统状态, 执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序,以及当前负载的情况. 2.cat /proc/cpuinfo 查看CPU核数,指的是逻辑CPU 3.vmstat 监控系统状态,用来获得有关进程.虚存.页面交换空间及 CPU活动的信 4.用法vmstat 1  动态的每一秒显示一次 r: 同run,显示此时执行的进程数, b: 等待IO的进程数量,有多少个进程在等待. swpd:交换分区,内存不够的时候,系统把内存中的一部分空

Linux日常运维管理技巧--监控系统状态

一.查看磁盘状态 1.iostat –x 磁盘使用 %util 表示io等待, 2.iotop 磁盘使用(动态显示) 二.free查看内存使用情况 1. free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存.共享内存将被忽略 命令参数: -b 以Byte为单位显示内存使用情况. -k 以KB为单位显示内存使用情况. -m 以MB为单位显示内存使用情况. -g   以GB为单位显示内存使用情况. -o 不显示缓冲区调节列. -s<间隔秒数> 持续观察内

Linux日常运维管理技巧: w命令-查看系统负载、vmstat命令、top命令、sar命令

                              w命令:查看系统负载      w  load average 单位时间内使用cpu活动的活动进程有多少个   查看系统cpu(逻辑cpu)数量   cat /proc/cpuinfo (当我们的进程在单位时间内活动数量不超过我们的系统逻辑cpu数量就是最佳状态, 当我们的进程大于cpu时要注意是什么占用我们的cpu)                                                            

linux日常运维管理命令

Linux用户管理 一.基于命令行管理工具 1.useradd:建立用户 -c:描述 -d:家目录 -g:所属组 -G:附属组 -s:环境变量 -u:UID 2.userdel:删除用户 Userdel -r deng 3.usermod:修改已有用户的信息 4.passwd :设置密码 passwd -d deng 删除密码 passwd -l deng  暂时锁定用户密码 passwd  -u deng 解锁用户密码 5.chage:密码老化 chage  d 0 deng  将deng用户

Ceph日常运维管理和排错 -- &lt;7&gt;

Ceph日常运维管理 集群监控管理 集群整体运行状态 [[email protected] ~]# ceph -s cluster: id: 8230a918-a0de-4784-9ab8-cd2a2b8671d0 health: HEALTH_WARN application not enabled on 1 pool(s) services: mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h) mgr: ceph

django实现Linux运维管理平台

老早之前就想做一个运维管理平台的项目了,但是一直没沉下来去做,上半年的时候毕设选择了这个课题,想着逼自己一把,不管做出来的怎么样,先把它搞起来..... django的工作原理: 文字说明: (1)Web服务器收到用户的http请求. (2) Django通过URL控制器来判断对应的视图(View)函数从而对http请求做处理. (3)视图函数调用相应的模型来存取数据.调用相应的模板把数据展示出来. (4)视图函数最终返回一个http的响应给Web服务器. (5)Web服务器把接收到的响应数据发

SUSE Linux 11编译安装Ansible自动化运维管理工具

ANSIBLE Ansible是一个使用Python语言开发的Linux平台下的自动化运维管理工具,它支持远程管理绝大多数Linux或Windows主机.Ansible默认通过SSH协议管理机器,即只需要在管理主机上安装Ansible就可以远程管理Linux主机,被托管节点主机不需要安装.对于Windows机器则是通过与Windows的Winrm Service服务(PowerShell3.0需要以上的版本)进行远程管理. Ansible需要Python2.6或Python2.7以上(包括3.0

教你如何用好这些IT运维管理必备工具

能熟练使用下面的两三个IT运维管理工具,你就是高手中的高手. 统一帐号管理 你还在自己写脚本批量增加机器的用户名.分组和修改密码或者同步主机的/etc/passwd吗?你还在使用脚本批量对用户设置权限吗?如果有一台帐号主机能够提供所有服务器的帐号.密码.权限控制,如此一来,如果想要增加.修改.刪除用户,只要到这台服务器上面处理即可,这样是不是很方便? 1. LDAP 统一管理各种平台帐号和密码,包括但不限于各种操作系统(Windows.Linux),Linux系统sudo集成,系统用户分组,主机

运维管理心得

一.运维管理心得首先接到任务,ceo说招了一批培训生进来实习,叫我给他们培训短时间内可以接手线上工作还给我下馅饼,承诺教人有多少多少奖金,唉,这个先不说了,先介绍怎么一周内把新人培训上手 新人来到的第一天,不用安排太多东西,避免造成太大的压力,先让他们熟悉公司环境可以先叫他们安装日常用到的工具,然后安装虚拟机,自己练习日常命令 第二天可以给他们一张公司的架构图,以及介绍架构的走向以及需要安装那些服务器应用软件让他们在自己的虚拟机安装需要安装的软件,以及介绍他们日常主要负责什么内容 第三天规定安装