from:http://mp.weixin.qq.com/s?__biz=MzAwNjY4NTQ4MA==&mid=400797122&idx=1&sn=b73ba049be8699eab97d58792a68676d#rd
当你登录到一台存在性能问题的Linux服务器上时,在头一分钟,你会检查什么?
我们看看Netflix的性能工程师是怎么做的。
Netflix大量使用EC2 Linux服务器,很多时候是用一些较为高层的工具做云或实例层次的分析。不过有时仍然需要登录到某个实例上,运行一些标准的Linux性能工具。
在最开始的一分钟内,可以先利用手头的标准Linux工具大致了解性能状况。借助如下10条命令(有些命令需要安装sysstat包),了解系统资源使用状况和正在运行的进程。先检查错误(errors)和饱和度(saturation),再检查资源利用率(resource utilization)。饱和度指的是负载已经超过处理能力,像请求队列的长度,等待时间等。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
这里要提一下定位性能瓶颈的USE方法。在Brendan Gregg的《System Performance: Enterprise and the Cloud》(中译本:《性能之巅:洞悉系统、企业与云计算》)一书中有具体的描述。
如果手头有这本书的中译本,可以看一下36页:
USE方法(utilization、utilization、errors)应用于性能研究,用来识别系统瓶颈。一言以蔽之,就是:
对于所有的资源,查看它的使用率、饱和度和错误。
这些术语定义如下。
· 资源:所有服务器物理元器件(CPU、总线……)。某些软件资源也能算在内,提供有用的指标。
· 使用率:在规定的时间间隔内,资源用于服务工作的时间百分比。虽然资源繁忙,但是资源还有能力接受更多的工作,不能接受更多工作的程度被视为饱和度。
· 饱和度:资源不能再服务更多额外工作的程度,通常有等待队列。
错误:错误事件的个数。
……
USE方法会将分析引导到一定数量的关键指标上,这样可以尽快地核实所有的系统资源。在此之后,如果还没有找到问题,那么可以考虑采用其他的方法。
下面具体看一下这10条命令。
uptime
快速查看平均负载(任务对CPU资源的需求)。输出中的“load average:”后面的三个数字,是系统在1分钟、5分钟和15分钟内的平均负载。表示负载随时间的变化情况。
它给出的只是一个较为高层的情况,往往需要借助其他工具进一步确认性能问题,有时候需要通过其他一些指标来了解CPU负载,例如vmstat或mpstat。
2. dmesg | tail
查看最后10条系统消息。查找可能会引发性能问题的错误。千万不要漏掉这一步。
3. vmstat 1
统计虚拟内存信息。参数1指的是打印1秒内的统计信息。
要检查的列:
r:运行队列的长度(这个参数的解释,建议参考《性能之巅》一书)。可以更好地确定CPU的饱和度。“r”值大于CPU数则为饱和。
free:以kb为单位的空闲内存。如果这个值很大,说明有足够的空闲内存。下面将介绍的第7条命令——“free -m”,可以更好地解释空闲内存的状态。
si, so:换入的内存和换出的内存。如果它们不为0,说明内存已经耗尽。
us, sy, id, wa, st:CPU时间的不同组成部分,是所有CPU的平均数。分别表示用户态时间、系统态时间(内核)、空闲、等待I/O以及窃取时间(stolen time,虚拟化环境下,CPU在其他租户上的开销)。
将用户态时间和系统态时间相加,可以判断CPU是否忙碌。如果一直有等待I/O,表明存在磁盘瓶颈。因为任务阻塞等待磁盘I/O,此时CPU是空闲的。可以将等待I/O看作另一种形式的CPU空闲。
I/O处理一定会消耗系统态时间。如果系统时间平均占比很高,比如说超过20%,或许可以深入研究一下:可能是内核处理I/O的效率不高。
4. mpstat -P ALL 1
打印每个CPU的状况。可以检查各CPU的负载是否均衡。比如,如果一个CPU很热,可能是单线程应用造成的。
5. pidstat 1
pidstat按进程打印CPU的使用情况。循环输出活动进程的信息。可用于观察模式随时间的变化情况。用户也可以把观察到的信息记录下来,以供分析研究。
像图中的例子,可以看到有2个Java进程消耗了大部分CPU时间。“%CPU”这一列是所有CPU的整体情况,“1591%”这个值表明这2个Java进程几乎占用了16个CPU。
6. iostat -xz 1
这是了解块设备的一个极佳工具,能看到实际负载和性能信息。
r/s, w/s, rkB/s, wkB/s:分别表示每秒发给磁盘设备的读请求数,每秒发给磁盘设备的写请求数,每秒从磁盘设备读取的KB数,每秒向磁盘设备写入的KB数。可以使用它们表示负载特性。性能问题可能就是由过多的负载造成的。
await:平均I/O响应时间,单位为毫秒。包括排队时间和服务时间。如果它大于预期的平均时间,可能是设备已经饱和,也可能是设备存在问题。
avgqu-sz:提交到设备的平均请求数。如果大于1,设备可能已经饱和。
%util:设备使用率。设备忙于处理请求的百分比。如果大于60%,通常会导致较差的性能(可以在await中看出来),不过也与具体的设备有关。如果接近100%,通常意味着设备已经饱和。
如果存储设备是后面有多块磁盘支撑的逻辑磁盘,即使设备使用率是100%,后端磁盘也可能远没有饱和,而是还能处理更多工作。
7. free -m
主要看最右边的两列:
buffers:用于块设备I/O的缓冲区高速缓存的大小。
cached:文件系统使用的页缓存大小。
我们只需要检查这两个值,如果它们接近0,则会导致更高的磁盘I/O(可以使用iostat确认),性能更糟。图中的例子,这个状况看上去还不错。
8. sar -n DEV 1
使用该工具检查网络接口的吞吐量,以rxkB/s和txkB/s为手段测量负载。
9. sar -n TCP,ETCP 1
这是一些关键TCP指标的总结。其中包括:
active/s:每秒本地发起的TCP连接数(比如通过connect())。
passive/s:每秒远端发起的TCP连接数(比如通过accept())。
retrans/s:每秒TCP重传数。
active和passive连接数通常用于粗略地测量服务器负载。方便起见,可以把active看作向外的连接,把passive看作向内的连接;不过也有不严格之处,比如考虑从localhost到localhost的连接。
重传数是网络或服务器问题的一个信号:可能是网络不可靠;也可能是服务器过载和丢包。像图中的例子,每秒只有一个新的TCP连接。
10. top
top命令包含很多前面检查过的指标。可以用个命令来检查是不是有指标和之前命令的输出差距很大。
top命令有个缺点,很难看出某个指标随时间的变化模式,这种情况下用像vmstat和pidstat这样的命令可能更清楚,它们能提供滚动输出。间歇性问题的一些迹象,如果不能足够快地暂停输出(Ctrl-S暂停,Ctrl-Q继续),可能会错过。
相关推荐
用十条命令在一分钟内检查Linux服务器性能
如果选择用命令行模式登录Linux的话,那么看到的第一个Linux命令就是login:。 一般界面是这样的: Manddrake Linux release 9.1(Bamboo) for i586 renrel 2.4.21-0.13mdk on i686 / tty1 localhost login:root ...
平均代表的是系统一分钟 五分钟 十五分钟系统的平均负载值, 如果((1.36 +0.81 +0.37)/3 *100%)3个值相加除以三再乘以百分之百, 如果大于百分之六十那么说明系统的负担压力重, 下面两个参
Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux Torvalds (Torvalds@kruuna.helsinki.fi)写了 Linux核心程序的 0.02 版开始的,但其后的发展却几乎都 是由互联网上的 Linux社团(Linux Community)互通...
connect_timeout=60 删除挂起了一分钟后的活动连接 anon_max_rate=50000 匿名用户最大传输速率为50KB/s 这样设置以后,通过vsFTPd创建的匿名服务器就更安全了。 虚拟用户的配置 执行指令查看db4和db4-utils组件的...
Linux服务器巡检指导 "设备 " " "硬件配置信息 " "机型号 " " "CPU " " "内存 " " "硬盘 " " "系统信息 " "操作系统 " " "IP " " "主机名 " " (一)服务器硬件检查 "检查项 "检查操作 "参考标准 "巡检情况 " " " " ...
对于服务器的性能维护和分析,我们需要使用到一些基本的命令。会根据实际的应用需要,不断的更新内容。 一、查看系统整体的负载(top) top (1)第一行: 系统时间 + 系统运行时间 + 几个用户 + 1/5/15分钟系统...
Linux服务器巡检报告 Linux服务器巡检指导 (一)服务器硬件检查 (二)操作系统检查 (二)性能检查 Top命令 统计信息区 前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其 user load ...
要了 解服务器每时每刻的整体运行状态,单靠几个Linux自带的性能监测命令是很难实现的。 所以,利用shell脚本和开源监控工具进行服务器监控成为了我的两个主要的选择。 利用shell脚本监控能够很好把握的监控的内容,...
Linux 下的性能分析,少不了要使用 sysstat 工具包中的命令。同时 sysstat 服务会自动每个10分钟收集一次系统状态信息,并将它们存储到 /var/log/sa目录下。每天一个文件,文件名分别是sa01, sa02,... sa30.. 自动...
UnixBench 是一个用于测试 unix 系统性能的工具,也是一个比较通用的 benchmark。 linux下执行步骤: 1. 解压 UnixBench5.1.3.tgz 。tar -zxvf UnixBench5.1.3.tgz 2. cd UnixBench , 执行 make , 然后执行 ./Run ...
TscanCode致力于帮助程序员从一开始就发现代码缺陷...2. 快速准确,性能可达每分钟200K线,准确率达90%左右。 3. 使用方便,不需要严格的编译环境,一个命令即可运行。4. 可扩展,您可以使用TscanCode实现自己的检查。
项目特性,简单易用:通过Web页面快速创建数据源、同步任务,操作简单,一分钟上手。定时触发:对接xxl-job定时,设置cron表达式触发同步任务。配置化任务对接:将数据库信息、任务详情界面化配置。高性能同步:使用...
TscanCode支持多种语言:C/C++、C语言和LUA代码;...TscanCode使用方便,不需要严格的编译环境,一条命令即可运行; TscanCode是可扩展的,您可以使用TscanCode实现自己的检查。 支持windows/mac/linux
分析硬件性能与使用生命周期 " 3) 第三方检测工具检查 "检查内容 " "硬件历史异常报错信息 " "HP 诊断工具: " "打开开始——程序——HP System Tools——HP Insight Diagnostics online " "Edition for Windows——...
在快速安装说明(http://zstack.org/installation/)里,记录了如何通过两条命令,5分钟时间,完成在一台Linux机器上部署单机演示环境。或者阅读多控制节点安装手册...
有比较多的朋友说在安装mysql时会“卡住”,其实不然,只不过是因为mysql的编译时间比较长,10至30分钟不等,具体看机器的硬件配置,所以请耐心等待,但有些是网络中断就真像卡住了一样,到底是不是真卡住,可以看...
现在,代码设置为在一分钟后使 json web-tokens 过期,并且仅当该用户提供刷新令牌时才向用户发送新的 json web-token。 为了增强安全性,可以修改代码以在向服务器发出的每个请求上重新发布新的 json web 令牌和新...
※用多线程的方式并发连接登录多台LINUX服务器,实现并发命令操作、文件分发,实时结果返回,并可根据服务器性能控制线程量,千台机器改密码1分钟完成。 3、HTML/JAVAScript基础 4、WEB JS Package BootStrap 介绍...