一. Linux服务器的性能指标
1. CPU
1.1 CPU状态
在任意时间内,CPU有7个状态:
1.idle,表示CPU闲置并等待工作分配.
2.user,表示CPU在运行用户的进程
3.system,表示CPU在执行kernel工作
4.nice,表示CPU花费在被nice改变过优先级的process上的时间(注意:被nice命令改变优先级的process仅指那些nice值为负的process.花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此整个时间加起来可能会超过百分之百)
5.iowait,表示CPU等待IO操作完成的时间
6.irq,表示CPU开销在响应硬中断上的时间
7.softirq,表示CPU开销在响应软中断上的时间.
我们一般用vmstat看到的都是四个状态:sy,us,id,wa,通过他和load avg结合,基本可以知道cpu的状态
大部分的性能工具用百分比表示CPU时间.当system时间占用很高的时候,你可以用oprofile工具发现时间都花费在哪里.当iowait很高的时候,你需要分析你的IO设备,比如磁盘,网卡.
1.2 Average load
Load Average表示cpu正在处理以及等待cpu处理的进程数之和的统计信息,也就是cpu使用队列长度的统计信息。
满负载:即CPU Load = CPU个数*核数。一般要保证性能良好,负载最好小于0.7*CPU个数*核数。
例如:2个4核的cpu, Load Average须< 0.7 * 2 * 4 = 5.6
常用命令:
1. 查看cpu信息:grep ‘model name’ /proc/cpuinfo
2. top命令应该是把每个核的CPU占用率加起来,算一个和,于是多核情况下会top命令会计算出超过100%。load average显示的三个数字的时间分别为1分钟,五分钟和十五分钟。
3. vmstat也可以查看
[admin@v015210 ~]$ vmstat 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 155752 61976 179580 309232 0 1 2 11 0 0 1 0 99 0 0 1 0 155752 61968 179580 309240 0 0 0 0 436 3597 0 0 100 0 0 0 0 155752 61612 179580 309240 0 0 0 0 508 3535 1 2 97 0 0
其中,r,b是指处于runnable,blocked的process。所有的runnable process形成了一个Run Queue,等待Linux调度线程的调度。系统的load是指running和runnable process的总和。
1.3 Interrupts & Context Switches
Interrupts对应vmstat中的in,即被处理过的中断数。在系统中,中断处理器的优先级非常高,而且执行速度非常快.很多时候,有些中断处理并不需要很高的处理优先级,所以也有soft- interrupt handler.如果有很多的中断,kernel需要花费大量的时间去处理中断.可以检查/proc/interrupts能够知道中断发生在哪个CPU 上.
Context Switches对于vmstat中的cs,即系统上正在做上下文切换的数目。 linux内核不断的在不同process间切换,造成一个错觉,让人感觉一个单CPU同时处理多个任务.不同process之间的切换称作 Context Switch.当系统做Context Switch时,CPU保存所有old process的context信息并获得new process的所有context信息.Context信息包括大量的linux追踪每个process信息,尤其是一些资源:那些process正在 执行,被分配了哪些内存,它打开了那些文件,等等.切换Context会触发大量的信息移动,这是比较高的开销.如果可能的话尽量保持很小的 context switches.
2. 内存
1. 1 内存基础
通常包含物理内存和虚拟内存(virtual Memory),好处是通过物理内存(RAM)和部分硬盘空间(SWAP)组合增大了总体的内存空间,坏处是由于硬盘部分的虚拟内存的性能有限,并且RAM和SWAP之间交换增加了系统的负担。
[phoenix.lif@aliadmin036158 ~]$ free total used free shared buffers cached Mem: 7680000 7504764 175236 0 490772 3193856 -/+ buffers/cache: 3820136 3859864 Swap: 2096472 88 2096384
其中,Mem:
(1) Total为总的物理内存;(2) Used表示总计分配给缓存使用的数量(即buffers和cache,但可能部分还未实际使用);(3)Free表示未被分配的内存;(4)share表示共享内存,一般不会使用;(5)buffers:表示系统分配但未被使用的buffers数量;(6)Cached:表示系统分配但未被使用的cache数量。后面详细说明buffer和cache的区别。
-/+ buffers/cache:
(1)Used表示实际使用的buffers和cache总量,即实际使用内存总量;(2)Free未被使用的buffer,cache及未被分配的内存之和,即系统可用内存。
Swap: 虚拟内存。如果系统物理内存用完了,但是仍有虚拟内存系统仍然可以运行虽然运行很慢;但是如果Swap也用完了,系统就会发生错误,通常会出现"application is out of memory"的错误,严重时造成系统死锁。通常Swap空间分配为物理内存的2-2.5倍,但也不用完全按照这个标准,如确定内存完全够用也没必要分配太多,我们线上的服务器就没有分配太多的Swap空间。
实际可用内存:Free(-/+ buffers/cache) = Free(Mem)+buffers(Mem)+Cached(Mem);
已分配内存:Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)
物理内存总大小:total(Mem) = used(-/+ buffers/cache) + free(-/+ buffers/cache)
1.2 Buffers & Cache
在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个 Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收。buffer cache是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。
磁盘操作有逻辑级(文件系统)和物理级(磁盘块),这两种缓存分别是缓存逻辑和物理级数据的。如我们进行的是文件系统操作,那么文件被缓存到Page Cache,如需要刷新文件的时候,Page Cache将交给Buffer Cache去完成,因为Buffer Cache是缓存磁盘块的。即直接去操作文件就是使用Page Cache,用dd等命令直接操作磁盘块,就是buffer cache缓存。
3. 磁盘I/O
磁盘I/O是Linux中最慢的部分。这个主要归咎于CPU到物理磁盘之间的距离(盘片旋转以及寻道)。Linux 内核将硬盘I/O 进行分页,多数Linux 系统的默认页大小为4K.
Linux 利用虚拟内存极大的扩展了程序地址空间,使得原来物理内存不能容下的程序也可以通过内存和硬盘之间的不断交换(把暂时不用的内存页交换到硬盘,把需要的内存页从硬盘读到内存)来赢得更多的内存,看起来就像物理内存被扩大了一样。
当程序启动的时候,Linux 内核首先检查 CPU 的缓存和物理内存,如果数据已经在内存里就忽略,如果数据不在内存里就引起一个缺页中断(Page Fault),然后从硬盘读取缺页,并把缺页缓存到物理内存里。缺页中断可分为主缺页中断(Major Page Fault)和次缺页中断(Minor Page Fault),要从磁盘读取数据而产生的中断是主缺页中断;数据已经被读入内存并被缓存起来,从内存缓存区中而不是直接从硬盘中读取数据而产生的中断是次缺页中断。
上面的内存缓存区起到了预读硬盘的作用,内核先在物理内存里寻找缺页,没有的话产生次缺页中断从内存缓存里找,如果还没有发现的话就从硬盘读取。很显然,把多余的内存拿出来做成内存缓存区提高了访问速度,这里还有一个命中率的问题,运气好的话如果每次缺页都能从内存缓存区读取的话将会极大提高性能。要提高命中率的一个简单方法就是增大内存缓存区面积,缓存区越大预存的页面就越多,命中率也会越高。
从上面的内存缓存区(也叫文件缓存区 File Buffer Cache)读取页比从硬盘读取页要快得多,所以 Linux 内核希望能尽可能产生次缺页中断(从文件缓存区读),并且能尽可能避免主缺页中断(从硬盘读), 这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少量可用物理内存的时候 Linux 才开始释放一些不用的页。我们运行 Linux 一段时间后会发现虽然系统上运行的程序不多,但是可用内存总是很少,这样给大家造成了 Linux 对内存管理很低效的假象,事实上 Linux 把那些暂时不用的物理内存高效的利用起来做预存(内存缓存区)。
Read pages,只读页(或代码页),那些通过主缺页中断从硬盘读取的页面,包括不能修改的静态文件、可执行文件、库文件等。当内核需要它们的时候把它们读到内存中,当内存不足的时候,内核就释放它们到空闲列表,当程序再次需要它们的时候需要通过缺页中断再次读到内存。
Dirty pages,脏页,指那些在内存中被修改过的数据页,比如文本文件等。这些文件由 pdflush 负责同步到硬盘,内存不足的时候由 kswapd 和 pdflush 把数据写回硬盘并释放内存。
Anonymous pages,匿名页,那些属于某个进程但是又和任何文件无关联,不能被同步到硬盘上,内存不足的时候由 kswapd 负责将它们写到交换分区并释放内存。
二. 性能评估方法
1. 评估方法
监控项 | 命令 |
CPU | top, uptime, vmstat, sar |
Memory | free, vmstat, sar |
I/O | iostat, sar |
网络 | netstat, sar |
线程 | ps, pstree, sar |
/proc中的重要信息 :
cat /proc/cpuinfo - CPU (i.e. vendor, Mhz, flags like mmx)
cat /proc/interrupts - 中断
cat /proc/ioports - 设备IO端口
cat /proc/meminfo - 内存信息(i.e. mem used, free, swap size)
cat /proc/partitions - 所有设备的所有分区
cat /proc/pci - PCI设备的信息
cat /proc/swaps - 所有Swap分区的信息
cat /proc/version - Linux的版本号
2. CPU性能评估
2.1 评价标准
nice | ok | bad | |
cpu | user% + sys%<=50% | 50%<user%+sys%<85% | user% + sys% >= 85% |
load | Load Average<= 0.3* CPU个数*核数 | 0.3<Load<=0.7 Average | Load Average > 0.7 * CPU个数*核数 |
2.2 监控方法
2.2.1 uptime
[admin@v015208 ~]$ uptime 19:05:21 up 534 days, 5:41, 1 user, load average: 0.16, 0.03, 0.01
可以明显的看到当前服务器的load average
2.2.2 vmstat
vmstat监控cpu主要关注proces和cpu:
proces:r表示运行和等待cpu时间片的进程数,如果r长时间大于cpu的个数,说明cpu不足;
b表示等待资源(如I/O,内存交换等)的进程数;
cpu: us比较高,表明用户进程消耗cpu时间多,如果长期大于50%就需要考虑优化相关代码和算法;
us+sy大于85%,说明存在可能存在cpu资源不足;
st列来自于一个虚拟机偷取的CPU时间的百分比;
2.2.3 sar
[phoenix.lif@xxx.cm3 ~]$ sar -u -P ALL 1 2 Linux 2.6.18-164.el5xen (xxx.cm3) 03/12/2012 07:36:53 PM CPU %user %nice %system %iowait %steal %idle 07:36:54 PM all 0.00 0.00 0.00 0.00 0.00 100.00 07:36:54 PM 0 0.00 0.00 0.00 0.00 0.00 100.00 07:36:54 PM 1 0.00 0.00 0.00 0.00 0.00 100.00 07:36:54 PM 2 0.00 0.00 0.00 0.00 0.00 100.00 07:36:54 PM 3 0.00 0.00 0.00 0.00 0.00 100.00 07:36:54 PM 4 0.00 0.00 0.00 0.00 0.00 100.00 07:36:54 PM CPU %user %nice %system %iowait %steal %idle 07:36:55 PM all 0.00 0.98 0.00 0.00 0.00 99.02 07:36:55 PM 0 0.00 3.70 0.00 0.00 0.00 96.30 07:36:55 PM 1 0.00 0.00 0.00 0.00 0.99 99.01 07:36:55 PM 2 0.00 0.00 0.00 0.00 0.00 100.00 07:36:55 PM 3 0.00 0.00 0.00 0.00 0.00 100.00 07:36:55 PM 4 0.00 0.00 0.00 0.00 0.00 100.00 Average: CPU %user %nice %system %iowait %steal %idle Average: all 0.00 0.50 0.00 0.00 0.00 99.50 Average: 0 0.00 2.00 0.00 0.00 0.00 98.00 Average: 1 0.00 0.00 0.00 0.00 0.50 99.50 Average: 2 0.00 0.00 0.00 0.00 0.00 100.00 Average: 3 0.00 0.00 0.00 0.00 0.00 100.00 Average: 4 0.00 0.00 0.00 0.00 0.00 100.00
参数说明:nice列显示了运行正常进程所消耗的CPU 时间百分比
steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。
sar是个非常强大的工具,还可以使用来查看网络,I/O等等使用情况
3. 内存性能评估
3.1 评价标准
nice | ok | bad | |
Memory | 可用内存=>70% | 70%> m => 20% | 可用内存<20% |
Swap | si = 0; so =0 | si, so大体上都为0 | si, so长期不为0 |
3.2 监控方法
3.2.1 free
使用free -m查看内存使用情况,具体计算前文及上面的评价标准。如果可用内存小于20%考虑增加内存。
3.2.2 vmstat
关注memory和swap
memory:
swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。
free列表示当前空闲的物理内存数量(以k为单位)
buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。
cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap:
si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。
so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。
3.2.3 sar分析内存
[phoenix.lif@xxx.cm3 ~]$ sar -r 2 3 Linux 2.6.18-164.el5xen (xxx.cm3) 03/12/2012 08:23:05 PM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 08:23:07 PM 951728 6728272 87.61 511660 2428304 2096376 96 0.00 0 08:23:09 PM 951728 6728272 87.61 511660 2428308 2096376 96 0.00 0 08:23:11 PM 951052 6728948 87.62 511660 2428320 2096376 96 0.00 0 Average: 951503 6728497 87.61 511660 2428311 2096376 96 0.00 0
具体参数看下就明白,需要说明的是:sar -R 2 3中R显示结果的单位是pagesize,pagesize的大小看具体机器。
4. I/O性能评估
4.1 评价标准
nice | ok | bad | |
iowait | iowait<=10% | 10%<iowait<=40% | iowait>40% |
Blk_read/s和Blk_wrtn/s | 都比较小 | 适中且有一定规律 | 某一个值过大 |
await和svctm | svctm=await | svctm约等于await | 差值很大 |
4.2 iostat
[admin@v015208 ~]$ iostat 2 3 Linux 2.6.18-164.el5xen (xxx.cm3) 2012年03月19日 avg-cpu: %user %nice %system %iowait %steal %idle 0.11 0.02 0.05 0.49 0.01 99.31 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn xvda 2.62 4.92 40.27 229962298 1881769193 xvda1 0.00 0.00 0.00 2880 637 xvda2 0.88 1.02 11.97 47786282 559558536 xvda3 0.11 0.58 2.44 27145671 114223592 xvda4 0.00 0.00 0.00 30 0 xvda5 1.63 3.32 25.85 155027008 1207986428
参数说明: Blk_read/s表示每秒读取的数据块数。
Blk_wrtn/s表示每秒写入的数据块数。
Blk_read表示读取的所有块数。
Blk_wrtn表示写入的所有块数。
tips: 可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。
4.3 sar
[admin@v015208 ~]$ sar -d 1 2 Linux 2.6.18-164.el5xen (xxx.cm3) 2012年03月19日 10时32分01秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10时32分02秒 dev202-0 5.94 0.00 285.15 48.00 0.07 11.33 6.00 3.56 10时32分02秒 dev202-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分02秒 dev202-2 5.94 0.00 285.15 48.00 0.07 11.33 6.00 3.56 10时32分02秒 dev202-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分02秒 dev202-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分02秒 dev202-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分02秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10时32分04秒 dev202-0 1.98 0.00 23.76 12.00 0.02 10.00 10.00 1.98 10时32分04秒 dev202-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分04秒 dev202-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分04秒 dev202-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分04秒 dev202-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时32分04秒 dev202-5 1.98 0.00 23.76 12.00 0.02 10.00 10.00 1.98 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev202-0 3.96 0.00 154.46 39.00 0.04 11.00 7.00 2.77 Average: dev202-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev202-2 2.97 0.00 142.57 48.00 0.03 11.33 6.00 1.78 Average: dev202-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev202-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: dev202-5 0.99 0.00 11.88 12.00 0.01 10.00 10.00 0.99
参数说明: await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
%util表示一秒中有百分之几的时间用于I/O操作。
tips:
正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
5. 网络性能评估
5.1 评估标准
5.2 ping
[admin@v015208 ~]$ ping oo.taobao.com PING xxxx.com (xxxxx.xxxx.xx.xx) 56(84) bytes of data. 64 bytes from 110.75.27.36: icmp_seq=1 ttl=60 time=0.360 ms 64 bytes from 110.75.27.36: icmp_seq=2 ttl=60 time=0.386 ms 64 bytes from 110.75.27.36: icmp_seq=3 ttl=60 time=0.410 ms 64 bytes from 110.75.27.36: icmp_seq=4 ttl=59 time=0.562 ms --- list.split.wmlp.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2998ms rtt min/avg/max/mdev = 0.360/0.429/0.562/0.081 ms
time显示了两台主机之间的网络延时情况,如果此值很大,表示网络延迟很大。
packet loss表示网络丢包率,该值越小,表示网络的质量越高。
5.3 netstat -i检查网络接口状况
[admin@v015208 ~]$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 121392042 0 0 0 109458078 0 0 0 BMRU lo 16436 0 2709895 0 0 0 2709895 0 0 0 LRU
参数说明:
l Iface:表示网络设备的接口名称
l MTU:表示最大传输单元,单位字节
l RX-OK/TX-OK:表示已经准确无误地接收/发送了多少数据包
l RX-ERR/TX-ERR:表示接收/发送数据包时产生了多少错误
l RX-DRP/TX-DRP:表示接收/发送数据包时丢弃了多少数据包
l RX-OVR/TX-OVR:表示由于误差而遗失了多少数据包
l Flg:表示接口标记,其中:
L:表示该接口是个回环设备
B:表示设置了广播地址
M:表示接收所有数据包
R:表示接口正在运行
U:表示接口处于活动状态
0:表示在该接口上禁用ARP
P:表示一个点到点的连接
tips:
正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP、RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。
当网络传输存在问题时,可以检测网卡设备是否存在故障,如果可能,可以升级为千兆网卡或者光纤网络,还可以检查网络部署环境是否合理。
5.4 netstat -r检查系统的路由表信息
[admin@v015208 ~]$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.232.15.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default UNKNOWN-10-232- 0.0.0.0 UG 0 0 0 eth0
5.5 sar -n显示网络运行状态
[admin@v015208 ~]$ sar -n DEV 1 2 Linux 2.6.18-164.el5xen (v015208.sqa.cm4) 2012年03月19日 11时12分12秒 IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 11时12分13秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时12分13秒 eth0 7.92 6.93 671.29 709.90 0.00 0.00 0.00 11时12分13秒 sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时12分13秒 IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 11时12分14秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时12分14秒 eth0 10.00 11.00 1342.00 1941.00 0.00 0.00 0.00 11时12分14秒 sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 8.96 8.96 1004.98 1322.39 0.00 0.00 0.00 Average: sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
参数说明:
l Iface:表示网络设备的接口名称
l rxpck/s:表示每秒钟接收的数据包大小
l txpck/s:表示每秒钟发送的数据包大小
l rxbyt/s:表示每秒钟接收的字节数
l txbyt/s:表示每秒钟发送的字节数
l rxcmp/s:表示每秒钟接收的压缩数据包
l txcmp/s:表示每秒钟发送的压缩数据包
l rxmcst/s:表示每秒钟接收的多播数据包
tips:
利用sar –n EDEV 1 2统计网络错误信息;利用sar -n SOCK 1 2可以统计套接字信息;
6. 任务进程分析
6.1 ps -afx 和 pstree -pu查看进程列表
详见:http://phoenix-mvp.iteye.com/admin/blogs/1442402
6.2 top查看进程
(按M键)和执行时间(按T键)来排序.
6.3 ps -aux查看所有进程
ps -aux|grep java查找java进程
6.4 使用jps命令查看java进程情况
6.5 traceroute
三. JVM监控方法
1. 相关说明
尽量少的Full GC
Full GC耗时小于40ms,Young GC小于20ms
2. 相关工具
2.1 线上使用相关命令
我们的应用线上没有配置JAVA_HOME,要是jps,jstat等命令,需要进入opt/taobao/java/bin目录
2.1 获取java应用进程
线上使用jps时,会发现每次jps命令获取到的进程一直在变,无法使用jstat等命令进行分析。(在测试环境是可以通过jps获取的)
线上可以使用pstree -pu命令获取系统的进程树如下图所示,7764就是本应用的java进程。
|-run.sh(7753,admin)---java(7764)-+-{java}(7765) | |-{java}(7766) | |-{java}(7767) | |-{java}(7768) | |-{java}(7769) | |-{java}(7770) | |-{java}(7771) | |-{java}(7772) | |-{java}(7773) | |-{java}(7774) | |-{java}(7775) | |-{java}(7776) | |-{java}(7777) | |-{java}(7778) | |-{java}(7779) | |-{java}(7797) | |-{java}(7800) | |-{java}(7801) | |-{java}(7804)
2.1 jstat
命令说明:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
线上如无法使用该命令,可尝试加上sudo
[admin@v015213 ~]$ jstat -gcutil 4678 2s S0 S1 E O P YGC YGCT FGC FGCT GCT 99.93 0.00 99.04 32.54 68.77 6 0.877 1 0.056 0.933 0.00 75.19 27.85 32.54 71.80 7 1.007 1 0.056 1.063 0.00 75.19 90.17 32.54 73.36 7 1.007 1 0.056 1.063 65.15 0.00 33.38 35.12 73.83 8 1.150 1 0.056 1.207
参数说明: S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
tips:
(1)一次Young GC时间 = 1.007 - 0.877 = 0.130 秒 这个时间就太长了,JVM性能不佳
(2)S0和S1的变化可以看出对象创建和Young GC相关情况
2.2 jmap
命令说明:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
jmap 是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用 SHELL jmap -histo pid>a.log可以将其保存到文本中去(windows下也可以使用),在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=f1 3024可以将3024进程的内存heap输出出来到f1文件里。
2.3 jstack
命令说明:输出当前线程执行的堆栈情况
注意:使用-l参数可以查看锁信息,但是会导致应用停顿。线上慎用!
其他相关命令这里见这里:http://blog.csdn.net/fenglibing/article/details/6411940
3. 远程监控JVM
3.1 jconsole jvisualVM
jconsole jvisualVM都自带远程监控。
需配置配置以下几个关键项,具体参考:http://ihuangweiwei.iteye.com/blog/1219302
(1). -Dcom.sun.management.jmxremote.port :这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
(2). -Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl
(3). -Dcom.sun.management.jmxremote.authenticate=false 指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
(4). -Djava.rmi.server.hostname :这个是配置 server 的 IP 的
其中 (2) , (3) 两个是固定配置,是 JMX 的远程服务权限的
3.2 Xmanager远程监控
下面是使用说明:
Window client - 10.19.18.14 | Linux server - 10.232.15.213
1. 在Window client上安装Xmanager Enterprise 3,启动Xmanager - Passive
2. ssh工具登录服务器;
3. [admin@v015213 ~]$ export DISPLAY=10.19.18.14:0.0
4. [admin@v015213 ~]$ jvisualvm
5. client端弹出提示框,点击是,即在window client端启动visualVM工具,监控服务端jvm情况
4. 常用技巧
4.1 相关情况统计 http://phoenix-mvp.iteye.com/admin/blogs/1447647
4.2 手动重启应用 进入bin目录,sudo -u admin -H ./jbossctl restart
4.3 及时记录现场日志
4.4 分析core文件
其他等等涉及公司内部服务器相关,保存在本地
相关推荐
### Linux服务器维护常用命令知识点详解 #### 一、概述 在Linux服务器的日常维护工作中,掌握一系列关键命令是必不可少的技能。这些命令可以帮助系统管理员高效地监控、管理和维护服务器环境。根据提供的信息,我们...
总结,"Spotlight on Unix"作为Linux服务器监控的得力助手,通过其丰富的功能和直观的界面,使得服务器管理和维护变得更加高效。正确理解和使用此工具,能大幅提升企业IT运维的效率和稳定性,降低运营风险,为企业...
《nmonLinux服务器性能监控详解》 在Linux服务器的日常管理中,监控系统性能是确保服务稳定运行的关键环节。...通过合理使用nmon,运维人员可以更好地管理和维护Linux服务器,保障系统的稳定运行。
不便之处请多谅解 也可以提供给作者相关的改进意见 我们共同进步 谢谢 ">使用此工具可以同时对 成千上万 多台linux服务器同时进行命令下发 文件上传 文件下载功能 由于对多台linux服务器进行管理需要维护大量密码 本...
Linux 服务器在电视台的运营中扮演着至关重要的角色,它们为网络管理、存储管理、数据库管理、Web服务以及虚拟化计算提供了坚实的基础。Linux 操作系统以其稳定性、安全性及可扩展性,成为企业级服务器的首选。Linux...
【Linux服务器维护】是IT行业中一项至关重要的任务,它关系到服务器能否安全稳定地提供服务。Linux操作系统以其开源、稳定和高效的特点,在服务器领域占据着重要地位。本文由马正军助教撰写,探讨了如何确保Linux...
总的来说,XMonitor是Linux服务器运维中的得力助手,它提供了一套全面的监控方案,帮助IT专业人员更好地管理和维护服务器,提升系统的可靠性和效率。通过学习和掌握XMonitor的使用,我们可以进一步提升自己的DevOps...
Linux服务器监控对于确保系统稳定运行和及时发现潜在问题至关重要。`wgcloud-v2.3` 是一款专为此目的设计的工具,它采用微服务架构,实现了分布式监控功能,能够覆盖多方面的监控需求。以下是该工具的主要特点和相关...
构建高可用Linux服务器涉及多个层面,包括硬件冗余、软件负载均衡、故障切换机制以及监控和管理工具。 首先,硬件冗余是高可用性的基础,通过使用冗余电源、磁盘阵列(如RAID)和热插拔硬件组件,可以减少因单点...
【文章标题】:扬州电视台Linux服务器维护实例解析 【文章内容】: Linux服务器在现代信息技术环境中扮演着至关重要的角色,尤其在扬州电视台等媒体机构中,它们被广泛应用于网络管理、系统管理、数据库管理和Web...
【Linux远程监控设计与实现】这篇文章主要探讨了如何在Linux环境下设计和实现一个远程监控系统,以实时监控服务器的CPU、内存和硬盘资源使用情况。该系统旨在提高网络管理的安全性和便利性。 1. **引言**: - 在...
Linux服务器巡检报告是针对Linux系统进行定期检查和维护的重要文档,目的是确保服务器稳定、高效地运行,防止潜在问题导致的服务中断。巡检通常涵盖硬件、操作系统和性能三个方面。 硬件检查是巡检的第一步,主要...
【标题】:“CRT连接Linux服务器”指的是使用CRT(SecureCRT)这款终端仿真程序来远程连接Linux...以上是关于“CRT连接Linux服务器”的主要知识点,通过熟练掌握这些技能,可以有效地进行远程Linux系统的管理和维护。
为了确保LoadRunner能够顺利地监控Linux系统,我们需要先在Linux服务器上安装一系列支持远程监控的服务。根据给定的部分内容,这里将介绍如何安装`rsh`、`rsh-server`以及`rpc.rstatd`等工具。 1. **安装rsh和rsh-...
1. **配置监控参数**:在LoadRunner Controller中,你需要定义监控的目标系统(即Linux服务器),并设置需要监控的资源类型和阈值。这可以通过创建新的监控场景来实现。 2. **添加监控代理**:LoadRunner支持多种...
### Linux服务器集群系统中的LVS集群体系架构解析 #### 一、引言 随着互联网的飞速发展,网络服务的需求量急剧增加,这对服务器的性能和可靠性提出了更高的要求。为了解决这一问题,Linux服务器集群系统应运而生,...
【Linux服务器监控】Linux类服务器监控是IT系统管理和维护中的重要环节,确保系统的稳定性和安全性。Zabbix是一款广泛使用的开源监控软件,它提供了分布式系统监控和网络监控功能,能够实时监测网络参数,并根据预设...
4. **系统监控与维护**:了解如何通过工具(如top、htop、iotop、iostat、vmstat)监控系统资源使用情况,以及如何进行性能优化。同时,也会讲解定期备份、日志分析和安全策略。 5. **防火墙与安全**:学习iptables...
1. **Nagios部署**:首先需要在服务器上安装Nagios核心组件及相关插件。配置文件中需要指定监控的服务列表、主机信息以及告警策略等。通常还需要设置SMTP服务以实现邮件通知功能。 2. **Cacti部署**:安装Cacti涉及...