系统调优小技巧&规则

本文详细介绍了如何通过vmstat、iostat、top等命令监控Linux系统性能,包括内存、CPU、IO使用情况,并提供了jmap、jstat等工具用于Java应用的性能分析。此外,还阐述了如何通过jprofiler等工具定位应用瓶颈。

理解你应用的关键路径及关键路径消耗的资源,然后查看该资源的利用率

第一步:从系统层开始,主要包括以下命令:

vmstat,iostat,sar,top,netstat,sysctl

vmstat指令可以查看linux系统性能情况:系统内核线程,虚拟内存,磁盘io,陷阱和cpu活动的统计信息等,如下所示:

songjing@songjing ~ $ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 1127788 181008 1319048    0    0     9    12   20  293  2  1 97  1

其中,标示系统内核的两个参数r,b都为0表示系统运行队列中的进程数和等待队列中的进程数都为 0,而正常情况下r值<=5,b值一般为0

memory区记录了系统虚拟和真实内存的使用情况:spwd表示当前已用的交换内存大小,free参数是空闲ram的大小,buff参数表示缓存使用了的ram大小,cache是指文件系统缓存的内存大小;

接下来是交换区swap的使用情况:si和so,si表示从磁盘分页到内存的数量;so表示从内存分页到磁盘的数量

接下来是显示磁盘io的两个参数bi:表示从磁盘读入的块个数为9,bo表示写入磁盘的块个数12

in和cs用于表示系统内核进行进程管理的繁忙程度:in表示中断次数20,cs表示进程上下文切换次数为293次.

最好四个参数用于表示系统cpu运行指标:us表示用户使用cpu为2%,系统调用1%,和空闲97%,其中wa表示系统io等待耗费的cpu时间百分比

iostat指令需要安装工具:sudo apt-get install sysstat

如下:

songjing@songjing ~ $ iostat
Linux 2.6.38-8-generic-pae (songjing) 2011年07月30日_i686_ (4 CPU)


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.80    0.23    0.49    0.46    0.00   97.03


Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               5.25        27.93        39.33    1276116    1796808

iostat主要表示io负载情况:

其中user表示应用程序在用户级占用的cpu时间,system表示在内核占用的cpu时间,iowait表示cpu空闲期间有未完成的io请求所占的时间百分比;idle表示cpu空闲期间没有未完成的io请求时所占时间百分比,tps表示一秒钟对磁盘的io请求次数;kB_read表示io设备sda读取到的kb总数, kB_wrtn表示写入的kb总数

top指令:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
 1192 root      20   0  290m 124m  85m S    3  3.2   9:03.25 Xorg                                                                                                       
 2528 songjing  20   0  332m  48m  25m S    3  1.2  20:10.23 chromium-browse                                                                                            
 8048 songjing  20   0  177m  31m  18m S    2  0.8   0:02.66 /usr/bin/termin                                                                                            
 3174 songjing  25   5  175m  46m  21m S    1  1.2   5:06.74 chromium-browse                                                                                            
 2061 songjing  20   0 83628  52m  23m S    1  1.4   3:17.10 compiz          

pid即为系统进程id,user表示当前进程是哪个用户运行的,PR表示当前进程的优先级别,NI表示优先级值,VIRT表示进程使用的虚拟内存总量,RES表示 进程使用的,未被换出的内存大小,SHR表示共享内存大小,S表示进程状态,CPU和MEM分别表示cpu占用百分比和物理内存占用百分比,Time+表示进程使用cpu的总量.top指令还有以下统计数据信息:

songjing@songjing ~ $ top 


top - 23:56:06(系统当前时间) up 13:04(系统开机运行时间),  2 users(系统用户个数),  load average: 1.03, 1.09, 1.07(系统1,5,15分钟内的任务队列平均值)
Tasks: 190 total(进程总数),   2 running, 181 sleeping,   4 stopped,   3 zombie
Cpu(s):  1.2%us(用户占用),  0.4%sy(内核占用),  0.2%ni(用户进程内改变过优先级的进程占用的cpu百分比), 97.5%id,  0.7%wa(io等待),  0.0%hi,  0.0%si,  0.0%st
Mem:   3976536k total,  2964420k used,  1012116k free,   189696k buffers
Swap:  2999292k total,        0k used,  2999292k free,  1378280k cached(已存在于内存中的交换区大小)


第二步:再看虚拟机:jmap,jstat gcutil,kill -3

jmap -histo pid

num #instances #bytes class name

----------------------------------------------

1: 68106 34656408 [I

2: 174493 21774680 [C

3: 104482 13261112 <constMethodKlass>

4: 31741 9985008 [B

5: 104482 9200544 <methodKlass>

6: 201899 8075960 java.util.concurrent.ConcurrentHashMap$EntryIterator

7: 151627 6542592 <symbolKlass>

8: 9218 5480720 <constantPoolKlass>

sudo:jmap -heap pid:

using thread-local object allocation.

Parallel GC with 4 thread(s)

Heap Configuration:

MinHeapFreeRatio = 40

MaxHeapFreeRatio = 70

MaxHeapSize = 1019215872 (972.0MB)

NewSize = 1048576 (1.0MB)

MaxNewSize = 4294901760 (4095.9375MB)

OldSize = 4194304 (4.0MB)

NewRatio = 2

SurvivorRatio = 8

PermSize = 16777216 (16.0MB)

MaxPermSize = 67108864 (64.0MB)

Heap Usage:

PS Young Generation

Eden Space:

capacity = 177537024 (169.3125MB)

used = 44955216 (42.87263488769531MB)

free = 132581808 (126.43986511230469MB)

25.32160052429402% used

From Space:

capacity = 393216 (0.375MB)

used = 0 (0.0MB)

free = 393216 (0.375MB)

0.0% used

To Space:

capacity = 21364736 (20.375MB)

used = 0 (0.0MB)

free = 21364736 (20.375MB)

0.0% used

PS Old Generation

capacity = 73859072 (70.4375MB)

used = 73194816 (69.80401611328125MB)

free = 664256 (0.63348388671875MB)

99.10064399401065% used

PS Perm Generation

capacity = 67108864 (64.0MB)

used = 50392072 (48.05762481689453MB)

free = 16716792 (15.942375183105469MB)

75.0900387763977% used

jps -v 查看所有java进程

jconsole:

使用前需要在run.sh中加入

JAVA_OPTS="$JAVA_OPTS 
    -Dcom.sun.management.jmxremote.port=8950
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false"

启动命令:jconsole localhost:8950


jstat -gcutil 3180

S0 S1 E O P YGC YGCT FGC FGCT GCT

0.00 0.00 3.67 59.92 72.88 19 0.266 7 1.987 2.253

jstack:程序hung的时候或者java程序崩溃时可以使用该工具查看具体出错的位置


最后看应用:jprofiler,瓶颈是会移动的,关注资源(cpu,mem,io,net),关注利用资源的(thread)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值