内容来源于微信CU技术社区------------------------------
1,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的异同所在:
2,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)端口被无故占用
3,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服务器上使用起来了!
其他命令: free vmstat top uptime netstat wget
3,ss
ss是Socket Statistics的缩写。
顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内 容。但ss的优势在于它能够显示更多更详细的有关网络连接状态的信息,而且比 netstat更快速、更高效。
netstat为什么会被淘汰呢?
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接读取/proc/net/tcp文件,执行速度都会非常慢。
当服务器维持的连接达到上万个的时候,使用netstat就等于浪费生命,而选用ss才是明智的选择。
天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中的tcp_diag模块。
tcp_diag是一个用于分析统计的模块,可以获得Linux内核中的第一手信息,这就确保了ss的快捷高效。
为了让你更坚决地和netstat说再见,我们再列举一些测试数据,以证明ss的快速绝非浪得虚名。
假如服务器维持着3万个socket连接,而此时系统管理员需要计算当前服务器的总连接数,则可以使用下面3种方法,不同方法的耗时有着明显差异:netstat -at | wc 耗时 15.60 秒 ss -atr | wc 耗时 5.40 秒(未利用tcp_diag) ss -atr | wc耗时 0.47 秒(利用tcp_diag)。
可以看到,利用了tcp_diag模块特性的ss命令,真的是飞一般的感觉。
下面,我就为大家介绍几个ss的最常用方法:
场景一:我想查看当前服务器的网络连接统计 $ ss –s
场景二:我想查看所有打开的网络端口 $ ss –l
场景三:我想查看这台服务器上所有的socket连接 # ss –a
阅读(3476) | 评论(0) | 转发(0) |