在“微学堂”分享之后,大家反馈说不错,故仔细整理成像样的文章,分成“上、中、下”3篇,计划分三天发出。
这是最后一篇,干货继续。
iostat
iostat,用来显示 CPU 的统计信息以及整个系统、适配器、tty设备和硬盘的输入/输出信息。
首先,我们来看看iostat执行起来的样子:
可以看到,iostat的输出信息主要分为三大部分。
- 第一部分:系统信息。包括了系统名称、内核版本信息以及架构信息等。
- 第二部分:CPU信息阅读过前面top系列文章的同学,相信对这几个指标项并不陌生。
- 第三部分:磁盘信息。这里展示出了本台服务器上各个存储设备的I/O情况,包括块的读写量和读写速度等。
当我们怀疑磁盘出现性能问题时,通常需要查看磁盘的各种信息。磁盘的工作状态如何?TPS 是多少?吞吐量有没有问题?我们需要通过命令把这些信息展示出来:
上面的命令显示了磁盘读写数据的情况,命令中的选项和参数有必要和大家解释一下:
- -d选项:表示只显示磁盘的使用状态,指定该选项后,iostat 将只显示磁盘信息而不再显示 CPU 信息。
- -k选项:表示使用统KB作为单位,比如 kB_read/s列的8.37表示的就是 8.37KB/s。
- “1 ”参数:表示采样时间,本例为1 秒。
- “3 ”参数:表示采样次数,本例为3 次。
这几个选项,应该算是使用最频繁的选项啦。至于iostat中的各个指标的具体含义,大家可以自己去探究。
sar
下面为大家介绍一位新朋友,它的名字叫作sar,它的脑子里装满了服务器系统性能的信息。你只要和它搞好关系,以后想获得任何这方面的信息,就都不用发愁了!
我们来看一下sar命令运行的样子:
其中,sar 2 3表示每2秒输出一次信息,共输出3次实时信息,再外加一行汇总的平均值,总共是4行信息。
sar命令支持多核CPU么
哈哈,完全没问题的,sar命令拥有一个-P选项(大写字母P ),就是专门用来展示多核处理器性能指标的。
当使用sar命令而没有设定-P选项时,sar会根据所有的CPU核信息给出一个汇总报告。
当使用-P ALL时,sar命令就会针对每一个CPU核都给出其具体性能信息,然后再给出一个总的性能信息。
比如,我这里有一个至强处理器的CPU,是八核的,看看-P选项的威力吧。
看到了吧,sar命令把每一个CPU核都编上了号(从0到7),并且依次展示了它们的各个性能指标。
除了cpu外,我还喜欢用sar来查看网络流量,用法是这样的:
如果使用EDEV关键字,那么sar命令会针对网络设备汇报其失败情况,例如:
好了,已经为大家介绍了sar的最常用的几种用法啦,大家可以在自己的Linux服务器上使用起来了!
ps
这次的主角,不是那款大名鼎鼎的图像设计软件Photoshop,而是Linux系统中的进程状态查看命令ps,即Process Status 。
如果你想查看你的服务器上有哪些进程,这些进程属于哪些用户,这些进程消耗了多少CPU资源,这些进程占据了多少内存资源,那么就快来一起学习ps命令吧。
下面我们就从实战出发,来学习ps的最常用用法。
ps aux便是我们最常用的ps用法了。它可以展示出系统中所有进程的状态信息,非常便于管理员进行全局查看。
那么,aux到底代表什么含义呢?
- a:显示各终端上的所有进程。
- u:会展示进程所属用户名。
- x:对于没有关联到终端上的进程,也展示出来。
有些同学可能还见过ps –aux的用法,输出结果和ps aux几乎一模一样,那么多一个减号、少一个减号,区别在哪里呢?
ps -aux,其实应该理解为:
[root@roclinux ~]# ps -a -u x
它的准确解释是:
- -a 部分:显示所有当前终端的所有进程。
- -u x 部分:显示用户名为“ x”的用户的所有进程。
假如系统中不存在用户名为“x ”的用户的话,ps就会把“ps -aux ”解释为“ps aux ”,这也就能解释为什么上例中ps aux和ps –aux的输出一模一样的原因了。
有同学会问,为什么会有这样的处理逻辑呢?为什么要有aux和-aux两种不同的表达格式呢?其实这是有历史原因的。
ps命令,是一个有故事的命令,由于历史原因,它其实拥有三种不同的书写格式:
- BSD格式:选项前不需要加短横线-,几个选项可以组合在一起使用,如ps aux。
- UNIX格式:选项前加短横线-,几个选项可以组合在一起使用,如ps -aux。
- GNU长格式:选项前加双短横线--,如 ps --format。
在ps命令中,我们常用的格式是BSD格式和UNIX格式,两种格式没有好坏之分,只有帮派之别。
而我们想查看的信息,无论是通过BSD格式,还是UNIX格式,基本都可以实现,只是在信息丰富度上略有差异,如下面的例子。
可以看到,ps aux和ps –eF展示的进程信息基本类似,那么-e和-F的作用是什么呢?
- -e选项:显示全部的进程,而不仅仅是当前终端下的进程,还包括没有在终端运行的进程。
- -F选项:显示详尽的进程信息。
通过上面的例子我们看到,大家只需选用自己熟悉的命令格式即可,哪种格式用得顺手就用哪种,不用苛求一定要采用哪一种而去否定另一种。
最后,我们给出ps命令输出列的解释,便于大家阅读和理解。
至于ps如何以树状结构查看进程、如何控制输出列、如何查看线程等技巧,可以通过读书来学习。
lsof
lsof,即list open files,可以用来查看进程打开的文件、目录和套接字等一系列信息。
lsof 是Linux系统管理员经常使用的工具之一,建议大家使用root账户运行该命令,不然的话,可能会有不少信息无法显示出来。
lsof可以通过文件名来定位打开该文件的进程,方法是执行lsof filename,这样,就可以找到到底是谁在打开这个文件啦。
既然可以通过文件名定位进程,那么同理,文件描述符也应该是可以的才对。比如我们想找出所有打开标准错误输出的进程:
[root@roclinux ~]# lsof -d 3
工作中,还经常有这样的需求,那就是通过PID 查找打开的文件。
[roc@roclinux ~]$ sudo lsof -p 5619
如果想查找用户getsmartoffer在系统中都打开了哪些文件,我们可以使用-u选项来实现:
[roc@roclinux ~]# sudo lsof -u getsmartoffer
除了查找文件之外,lsof还可以查看程序占用着哪些端口:
[root@roclinux ~]# lsof -i:22
上面的例子,可以查看端口22上都运行着哪些程序。
在书中,我们为大家准备了三个运维悬案,都是靠lsof来解决的:
- (1)文件删除,但磁盘空间没有释放
- (2)磁盘增长,但找不到幕后黑手
- (3)端口被无故占用
大家如果有兴趣,可以继续进阶阅读。
fuser
lsof的强大功能,无论是在文件方面、网络方面,还是在侦查悬案方面,它的表现都超出了大家的预期。
但是比较遗憾的是,lsof命令并不是POSIX标准中规定的命令,所以如果深究的话,lsof命令在可移植性方面会稍差一些。而经常拿来与lsof命令作比较的fuser命令,则属于POSIX标准的命令集。
所以我们在本讲座的最后一篇文章中,和大家介绍一下fuser命令。可能有人会问“POSIX”是什么,我们就在这里小科普一下。
POSIX,是Portable Operating System Interface的缩写,中文称为可移植操作系统接口。它是一种有关操作系统的行业标准。 POSIX标准的职责是确保程序在源代码级别上的可移植性。
通俗地说,只要在程序开发过程中使用的是POSIX标准规定的API和命令,那么这个程序就应该可以在任何其他符合POSIX标准的操作系统上编译和执行。
科普之后,大家应该能够理解lsof和fuser在可移植性方面的区别了吧!
fuser命令在功能上和lsof命令有很多相似之处,它可以显示出磁盘上的文件、目录,甚至网络端口正在被什么程序使用,并可以展示出这些程序的详细信息。
我们先来看一个示例。
[root@roclinux ~]# fuser -v /home/roc
上述命令列出了所有正在打开/home/roc/这个目录(不含目录下的文件)的进程。
这和lsof功能是类似的,在端口方面,fuser也可以实现类似lsof的功能。
比如,你想看看都有哪些程序占用了本机的22端口,则可以通过下面的命令来实现:
其实还有另一种写法,也是可以的:
也就是说,上面的-n tcp22可以简写为22/tcp的形式。这里的tcp是协议类型。fuser中的协议类型有file(默认)、tcp和udp三种。你可以自由组合它们来查找你想要的信息。
最后的最后,我们给大家一个对比图,来展示lsof和fuser的异同所在:
结尾
好了,所有的内容都已经介绍完成,上面的所有内容都来自我们写的新书,当然,上面讲的都是简略版,如果你想深入学习上面的20条命令的话,请购买我们写的新书。
谢谢各位小伙伴捧场!
如果大家有任何命令方面的问题,可以通过我的新书《Linux大棚命令百篇》上下册来了解和研究。
《Linux大棚命令百篇 - 上》文件和文本篇,购买传送门:
《Linux大棚命令百篇 - 下》网络和系统篇,购买传送门:
新书已经可以在京东、当当、China-pub、淘宝上买到啦,搜索“命令百篇”或“Linux大棚”就可以啦!
最后,欢迎大家关注“Linux大棚”公众号,有技术问题或职业发展问题,欢迎大家找我交流:)
谢谢大家!