linux 系统 指令lis,常用Linxu系统监控命令

) 树状线程图

5.top -Hp pid 实时的跟踪并获取指定进程中最耗cpu的线程

三、定位I/O瓶颈

1.mpstat -P ALL 1 1000

[bppf_bgw@devappdb001 /]$ mpstat -P ALL 1 1000

Linux 2.6.32-131.0.15.el6.x86_64 (devappdb001) 2014年11月12日 _x86_64_ (16 CPU)

11时59分11秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

11时59分12秒 all 0.18 0.00 0.48 0.00 0.00 0.00 0.00 0.00 99.34

11时59分12秒 0 0.98 0.00 0.98 0.00 0.00 0.00 0.00 0.00 98.04

11时59分12秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 2 0.00 0.00 0.97 0.00 0.00 0.00 0.00 0.00 99.03

11时59分12秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 4 1.98 0.00 5.94 0.00 0.00 0.00 0.00 0.00 92.08

11时59分12秒 5 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00

11时59分12秒 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 9 0.00 0.00 0.98 0.00 0.00 0.00 0.00 0.00 99.02

11时59分12秒 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

11时59分12秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

通过这个参数可以比较直观的看出当前的I/O操作是否存在瓶颈

2. iostat命令

[bppf_bgw@devappdb001 /]$ iostat -m -x 1 1000

Linux 2.6.32-131.0.15.el6.x86_64 (devappdb001) 2014年11月12日 _x86_64_ (16 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

0.71 0.00 0.69 0.03 0.00 98.57

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util

cciss/c0d0 0.68 21.53 0.86 49.56 0.03 0.28 12.45 0.06 1.09 0.10 0.49

同样可以观察对应的CPU中的%iowait数据,除此之外iostat还提供了一些更详细的I/O状态数据,比如比较重要的有:

avgqu-sz :  The average queue length of the requests that were issued to the device. (磁盘队列的请求长度,正常的话2,3比较好。可以和cpu的load一样的理解)

await : The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一个I/O操作从wait到完成的总时间)

svctm和%util都是代表处理该I/O请求花费的时间和CPU的时间比例。 判断是否瓶颈时,这两个参数不是主要的

r/s w/s 和 rMB/s  wMB/s 都是代表当前系统处理的I/O的一些状态,前者是我们常说的tps,后者就是吞吐量。这也是评价一个系统的性能指标

3.pid命令

命令: pidstat -p pid -u -d -t -w -h 1 1000

[bppf_bgw@devappdb001 /]$ pidstat -p 24290 -u -d -t -w -h 1 1000

Linux 2.6.32-131.0.15.el6.x86_64 (devappdb001) 2014年11月12日 _x86_64_ (16 CPU)

# Time TGID TID %usr %system %guest %CPU CPU kB_rd/s kB_wr/s kB_ccwr/s cswch/s nvcswch/s Command

1415768183 24290 0 0.00 0.00 0.00 0.00 6 0.00 0.00 0.00 0.00 0.00 java

1415768183 0 24290 0.00 0.00 0.00 0.00 6 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24293 0.00 0.00 0.00 0.00 1 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24294 0.00 0.00 0.00 0.00 6 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24295 0.00 0.00 0.00 0.00 12 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24296 0.00 0.00 0.00 0.00 1 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24297 0.00 0.00 0.00 0.00 5 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24298 0.00 0.00 0.00 0.00 10 0.00 0.00 0.00 0.00 0.00 |__java

1415768183 0 24299 0.00 0.00 0.00 0.00 11 0.00 0.00 0.00 0.00 0.00 |__java

相当实用的一个命令,可以基于当个进程分析对应的性能数据,包括CPU,I/O,IR , CS等,可以方便开发者更加精细化的观察系统的运行状态。不过pidstat貌似是在2.6内核的一些较新的版本才有,需要安装sysstat包。

ubuntu下,可以通过sudo apt-get install sysstat进行安装。

4.dstat命令

命令:dstat -y --tcp 1 1000

[bppf_bgw@devappdb001 /]$ dstat -y --tcp 1 1000

---system-- ----tcp-sockets----

int csw |lis act syn tim clo

3006 40k|103 314 1 17 12

5757 7452 |103 311 1 20 12

3494 5368 |103 314 1 20 12

3224 12k|103 316 1 20 12

2962 4799 |103 313 2 18 12

通过dstat --tcp可以比较方便的看到当前的tcp的各种状态,不需要每次netstat -nat去看

四、Java定位CPU使用100%的方法

1:找到导致cpu高的线程

[bppf@CSHJ_QZJK2 ~]$ top -H -p 27927

top - 10:20:30 up 206 days, 22:21, 21 users, load average: 0.73, 1.36, 0.80

Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.9%us, 2.0%sy, 0.0%ni, 96.8%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 32866796k total, 26710720k used, 6156076k free, 500100k buffers

Swap: 16776184k total, 1008696k used , 15767488k free, 4148764k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27927 bppf_fas 20 0 51288 25m 24m S 22.0 0.1 160:48.62 fasadmin

对应的线程id是十进制的,需要转换为十六进制的在threaddump文件中才可以看到

2:十进制转十六进制

[bppf@CSHJ_QZJK2 ~]$ printf "%x\n" 27927

6d17

3:找到对应的线程

jstack 27927 | less

查找:/0x6d17

找到对应的线程,把相关的方法找出来,可以精确到代码的行号,修改相关源码来fix bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值