10条Linux 命令了解服务器当前性能
参考:http://www.infoq.com/cn/news/2015/12/linux-performance
1. uptime
如果电脑运行缓慢,执行 uptime 可以大致查看Linux服务器的负载,执行w或者top命令也可以,在这三个命令都可以看到系统的当前负载
注:参考文章 - http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html
上述三个命令都会有如上的输出,该输出表示当前系统的1、5、15分钟内的平均负载。什么是系统负载?其实上述的参考文章说明了这个问题。
系统负载表示的是CPU的能力,系统的进程数。当CPU同时处理的进程越多,系统可以承受的最大负载比较大。
这个命令可以知道当前机器是否真的运行缓慢,但具体那个进程引起的,以及具体的原因(哪种资源,哪个进程)则需要另外的命令来确定。
2. dmesg | tail
下面的参考文章说,这个命令仅仅是打印环形缓冲区的内容,且这些内容也会实时输出到
syslogd
或者klogd,在我的机器上是syslogd,这个进程最终会打印日志到/var/log/messages。
文章说dmesg最有用的地方就是在syslogd或者klogd启动前捕获开机的信息。所以我认为直接看/var/log/messages文件查看当前系统的日志,应该可以查看到有用的信息。
如果系统出现了问题(网络堵塞,CPU负载高,IO负载高等)应该会有所表现。
注:参考文章 - http://unix.stackexchange.com/questions/35851/whats-the-difference-of-dmesg-output-and-var-log-messages
3. vmstat 1
每一行输出都会显示系统的核心指标,这些指标可以让我们更详细的了解系统状态。以下说明性能调优的相关参数,粗体字需要格外注意:
进程相关
- r: 进程运行队列的进程数,这个数据比uptime的输出更能体现CPU负载情况。如果这个数值已经大于机器CPU核数,那么机器的CPU资源已经饱和
- b: 等待IO的进程数,这个参数一般不需要关心
内存相关
- swpd: 使用虚拟内存大小
- free: 可用内存大小,如果可用内存不足,会导致性能问题
- buff: 用作缓冲的内存大小
- cache: 用作缓存的内存大小
交换区读写:如果以下俩个指标不为0,表明已经在使用swap交换区,机器的物理内存已经不足
- si: 每秒从交换区写到内存的大小
- so: 每秒写入交换区的内存大小
块IO读写,单位为1024KB
- bi: 每秒读取的块数
- bo: 每秒写入的块数
系统
- in: 每秒中断数,包括时钟中断。
- cs: 每秒上下文切换数。
CPU(以百分比表示)
- us: 用户进程执行时间(user time) 如果用户时间和系统时间加起来比较长,表示CPU忙于执行指令,CPU资源紧张。
- sy: 系统进程执行时间(system time)
- id: 空闲时间(包括IO等待时间)
- wa: 等待IO时间 如果等待IO时间比较长,那么说明磁盘IO为瓶颈
注:参考文章 - http://www.infoq.com/cn/news/2015/12/linux-performance
4. mpstat -P ALL 1
该命令可以显示每个CPU的占用情况,查看CPU资源
5. pidstat 1
该命令输出进程的cpu占用率,如果进程不占用CPU,不会在输出结果中显示,这个可以看到当前服务器中占用CPU比较高的进程
6. iostat -xz 1: -z 参数表示消除(不显示)那些不活跃的设备
cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。向设备发出的请求平均数量。如果这个值大于1,可能是硬件设备已经饱和
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比。表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能,同时可以参照IO操作等待时间
备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。
7. free -m
free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。
free命令输出解释:
第一行是表头。
第二行是从操作系统的角度计算机一共有多少内存(total),使用了多少(used),可用的还有多少(free),buffer(存放将要写入磁盘的缓存), cache(存放从磁盘读入的缓存)。
buffer和cache都是为了提高磁盘IO效率的,操作系统管理。
第三行是从应用的角度来看系统内存的使用情况
-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。
这里还用两个等式:
- FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
- FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
可用内存的大小会影响性能
注:参考文章 - http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
8. sar -n DEV 1
http://lovesoo.org/linux-sar-command-detailed.html
http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html 注:此文章-n参数说明有误,还是应该man sar查看用途
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
sar -n [keyword, [keyword] | ALL]
keyword: DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6
这主要是查看网络设备的情况
例:sar -n DEV 1
查看网络设备的吞吐率,通过判断网络设备的吞吐量,判断网络设备是否已经饱和,如示例输出中eth0网卡设备(网卡设备吞吐率例如:1Gbit/sec)
9 sar -n TCP, ETCP 1
查看TCP的连接状态
active/s: 每秒本地发起的TCP连接数,即服务器通过connect调用创建的TCP连接数
passive/s: 每秒远程发起的TCP连接数,即服务器通过accept调用创建的连接数
retrans/s: 每秒重传数量
这几个参数可以用来判断性能问题是否由于创建了过多的连接,进一步判断原因是因为主动发起的连接过多还是没动发起的连接数过多。
TCP重传可能是由于网络环境的恶劣,或者服务器压力过大导致丢包。
10. top
top是比较全面的命令,可以查看系统负载,系统内存,系统CPU等情况。top支持排序,可以按照内存占用大小、CPU占用大小等排序。
详细情况请查看man
其他
pstak: 跟踪进程栈
strace: 跟踪进程系统调用
netstat: 查看网络状态
10条Linux 命令了解服务器当前性能的更多相关文章
- 震惊,当我运行了这条Linux命令后,服务器竟然... (Linux中的删除命令)
震惊,当我运行了这条Linux命令后,服务器竟然... 0X00 写在前面 大家都听说过删库命令rm -rf /*,但是谁又真正实践过呢?但作为一个程序员,不看看这条命令执行后会发生什么,怎么能甘心呢 ...
- 外媒速递:系统管理员必须掌握的20条Linux命令
[51CTO.com原创稿件]外媒速递是核子可乐精选的近日国外媒体的精彩文章推荐,希望大家喜欢! 今天推荐的内容包括:系统管理员必须掌握的20条Linux命令.五款最佳Linux屏幕记录应用.MySQ ...
- 20个linux命令行工具监视性能(下)
昨天晚上第一次翻译了<20 Command Line Tools to Monitor Linux Performance>中的前十个命令,翻译得不是很好,今天晚上继续把后面的十个也翻译给 ...
- Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令
Linux 对我们的生活产生了巨大的冲击.至少你的安卓手机使用的就是 Linux 核心.尽管如此,在第一次开始使用 Linux 时你还是会感到难以下手.因为在 Linux 中,通常需要使用终端命令来取 ...
- 19、Linux命令对服务器内存进行监控
国际惯例,我们要知道什么是服务器的内存,内存有哪些作用.这里就不做过多介绍,Linux性能监控需要我们对底层要有一定的理解.下面我将会列出我常用的监控内存的工具. vmstat vmstat显示关于进 ...
- 每天一条linux命令
1.ls ls -hG //MacOS下输出带颜色文件和目录 ls -a // 显示隐藏文件 ls -l // 显示文件权限和组信息 ls -lR /home //列出 home目录包括其内部子目录 ...
- 20条Linux命令面试问答
程序师 http://www.techug.com/20-linux-command-interview-questions 问:1 如何查看当前的Linux服务器的运行级别? 答: ‘who -r ...
- 常用的50条linux 命令
从今天起,咱开始正式学习python了,于是遍整理了50条linux的常用命令. 1 线上查询帮助命令 :man 遇到什么不会的命令可以 man +你想要查询的命令 (需要有网),因为是英文的所以 ...
- 【转】20条Linux命令面试问答
问:1 如何查看当前的Linux服务器的运行级别? 答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别. 问:2 如何查看Linux的默认网关? 答: ...
随机推荐
- 通过sql实现约束
--手动删除一列 alter table 表名 dropi column 列名 --手动增加一列(后面加列类型) alter table 表名 add 列名 nvarchar(1000) --手动修改 ...
- 深复制与浅复制&&strong,copy修饰符总结
又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用. 一.深复制与浅复制 ...
- Spring-全局异常拦截
Spring MVC那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理 快速开始 @ResponseBody @Controlle ...
- Java学习个人总结
声明:个人原创,转载请在文章开头明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10063960.html 学习从来都是一个阶段的学习,然后进行整理与总 ...
- LDA和PCA区别
https://blog.csdn.net/brucewong0516/article/details/78684005
- 您可能不知道的CSS元素隐藏“失效”以其妙用——张鑫旭
一.CSS元素隐藏 在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.后宫选秀——一个一个看. { display: non ...
- Codeforces 750 F:New Year and Finding Roots
传送门 首先如果一开始就找到了一个叶子,那么暴力去递归找它的父亲,每次随机一个方向(除了已知的儿子)走深度次,如果走到了一个叶子就不是这个方向 (设根的深度为 \(1\))这样子最后到达深度为 \(3 ...
- Oracle数据库拼接字符串
Oracle数据库中字符串拼接的实现 select count() from THT_HTFKJL where ht=1: 假如结果为:31.例如上面例子想要给结果拼接字符串有二种实现方法,第一种使用 ...
- Github的readme.md的排版
排版格式: 1 标题与文字格式 标题 # 这是 H1 <一级标题> ## 这是 H2 <二级标题> ###### 这是 H6 <六级标题> 文字格式 **这是文字粗 ...
- SpringMVC中的拦截器、过滤器的区别、处理异常
1. SpringMVC中的拦截器(Interceptor) 1.1. 作用 拦截器是运行在DispatcherServlet之后,在每个Controller之前的,且运行结果可以选择放行或拦截! 除 ...