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的默认网关? 答: ...
随机推荐
- CSS Sprite 精灵图
.bg_sprite{background-image:url(/整图地址); background-repeat:no-repeat} 引用该类 .. 然后在元素中逐一定义背景坐标 .. 以下为关键 ...
- 使用 NodeJS+Express+MySQL 实现简单的增删改查
关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...
- 转载:Remote Validation
http://www.jb51.net/article/89474.htm 大多数的开发者,可能会遇到这样的情况:当我们在创建用户之前,有必要去检查是否数据库中已经存在相同名字的用户.换句话说就是,我 ...
- Java多线程学习之synchronized总结
0.概述 synchronized是Java提供的内置的锁机制,来实现代对码块的同步访问,称为内置锁(Intrinsic Lock) .内置锁包括两部分:一个是作为锁的对象的引用,另一个是由这个锁保护 ...
- 【转】一次由过量线程引发的OOM排查
mac的话,还得进行下特殊处理:右键mat显示包内容,进入Contents->MacOS下面,会有一个MemoryAnalyzer的命令. 打开终端,进入此路径找到MemoryAnalyzer, ...
- 深入理解MyBatis的原理(三):配置文件(上)
前言:前文提到一个入门的demo,从这里开始,会了解深入 MyBatis 的配置,本文讲解 MyBatis 的配置文件的用法. 目录 1.properties 元素 2.设置(settings) 3. ...
- Q:判断链表中是否存在环的相关问题
问题:如何判断一个单向链表中是否存在环? 例如: 链表中存在环(B-->D): <-- <--^ | | v | A-->B-->C-->D 链表中不存在环: A- ...
- c#之new关键词——隐藏基类方法
当从基类继承了一个(非抽象成员时),也就继承了父类的实现代码.如果是virtual成员,可以override:另外一种方法也能隐藏父类的实现代码(虚成员和非虚成员都可使用):定义与父类相同的方法名,加 ...
- C# 设计模式·行为型模式
这里列举行为型模式·到此23种就列完了···这里是看着菜鸟教程来实现··,他里边列了25种,其中过滤器模式和空对象模式应该不属于所谓的23种模式责任链模式:为请求创建一个接收者对象的链,对请求的发送者 ...
- HTML5新增的form属性简介——张鑫旭
一.引言 HTML5中新增了一个名为form的属性,是一个与处理表单相关的元素. 在HTML4或XHTML中,我们要提交一个表单,必须把相关的控件元素都放在<form>元素下.因为表单提交 ...