java性能分析 linux,linux 系统性能分析
在这篇文章中:linux
1、CPU
2、Memory
3、磁盘IO
4、Network IO
指标ios
工具缓存
cpu服务器
usr<=70%, sys<=35%, usr+sys<=70%网络
toptcp
memory工具
si == so == 0 可用空间>=30%性能
vmstat 1;free; /proc/meminfo线程
ioserver
iowait% < 20%
iostat -x;
network
udp:缓冲区不挤压, 无丢包 tcp:重传率
netstat -lunp; netstat -su; /proc/net/snmp
1、CPU
1.良好状态指标
CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%
上下文切换:与CPU利用率相关联,若是CPU利用率状态良好,大量的上下文切换也是能够接受的
可运行队列:每一个处理器的可运行队列<=3个线程
2.监控工具
top 最经常使用 略
vmstat
$ vmstat 1 (1 表示 1s 输出一次) procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 14 0 140 2904316 341912 3952308 0 0 0 460 1106 9593 36 64 1 0 0 17 0 140 2903492 341912 3951780 0 0 0 0 1037 9614 35 65 1 0 0 20 0 140 2902016 341912 3952000 0 0 0 0 1046 9739 35 64 1 0 0 17 0 140 2903904 341912 3951888 0 0 0 76 1044 9879 37 63 0 0 0 16 0 140 2904580 341912 3952108 0 0 0 0 1055 9808 34 65 1 0 0
重要参数:
r,run queue,可运行队列的线程数,这些线程都是可运行状态,只不过CPU暂时不可用; b,被blocked的进程数,正在等待IO请求; in,interrupts,被处理过的中断数 cs,context switch,系统上正在作上下文切换的数目 us,用户占用CPU的百分比 sys,内核和中断占用CPU的百分比 id,CPU彻底空闲的百分比
上例可得:
sy高us低,以及高频度的上下文切换(cs),说明应用程序进行了大量的系统调用;
这台4核机器的r应该在12个之内,如今r在14个线程以上,此时CPU负荷很重。
查看某个进程占用的CPU资源$ while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'db_server_login'; sleep 1; done PID NI PRI %CPU PSR COMMAND 28577 0 23 0.0 0 db_server_login 28578 0 23 0.0 3 db_server_login 28579 0 23 0.0 2 db_server_login 28581 0 23 0.0 2 db_server_login 28582 0 23 0.0 3 db_server_login 28659 0 23 0.0 0 db_server_login ……
2、Memory
1.良好状态指标
swap in (si) == 0,swap out (so) == 0
应用程序可用内存/系统物理内存 <= 70%
2.监控工具
vmstat
$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 2085940 402932 245856 8312440 1 1 15 172 0 0 7 5 88 0 0 1 0 2085940 400196 245856 8315148 0 0 532 0 4828 9087 30 6 63 1 0 2 0 2085940 397716 245868 8317908 0 0 464 552 4311 8427 29 6 65 0 0 2 0 2085940 393144 245876 8322484 0 0 584 2556 4620 9054 30 5 65 0 0 2 0 2085940 389368 245876 8325408 0 0 592 0 4460 8779 30 5 65 0 0
重要参数:
swpd,已使用的 SWAP 空间大小,KB 为单位 free,可用的物理内存大小,KB 为单位 buff,物理内存用来缓存读写操做的buffer大小,KB 为单位 cache,物理内存用来缓存进程地址空间的 cache 大小,KB 为单位 si,数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位 so,数据从 RAM 写到 SWAP(swap out)的大小,KB 为单位
上例可得:
物理可用内存 free 基本没什么显著变化,swapd逐步增长,说明最小可用的内存始终保持在 256MB(物理内存大小) * 10% = 2.56MB 左右,当脏页达到10%的时候就开始大量使用swap。
$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 3 252696 2432 268 7148 3604 2368 3608 2372 288 288 0 0 21 78 1 0 2 253484 2216 228 7104 5368 2976 5372 3036 930 519 0 0 0 100 0 0 1 259252 2616 128 6148 19784 18712 19784 18712 3821 1853 0 1 3 95 1 1 2 260008 2188 144 6824 11824 2584 12664 2584 1347 1174 14 0 0 86 0 2 1 262140 2964 128 5852 24912 17304 24952 17304 4737 2341 86 10 0 0 4 ^C
free
$ free total used free shared buffers cached Mem: 15728640 15600636 128004 0 0 13439080 -/+ buffers/cache: 2161556 13567084 Swap: 2104508 276276 1828232
单位KB。能够用 -m 选项要求输出单位为MB。
咱们使用total一、used一、free一、used二、free2 等名称来表明上面统计数据的各值,一、2 分别表明第一行和第二行的数据。
total1:表示物理内存总量。 used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free1:未被分配的内存。 shared1:共享内存,通常系统不会用到,这里也不讨论。 buffers1:系统分配但未被使用的buffers 数量。 cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。 used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。 free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
cache 和 buffer的区别:
Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。
因为CPU的速度远高于主内存,CPU直接从内存中存取数据要等待必定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减小了CPU的等待时间,提升了系统的效率。
Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期通常是焊在主板上,如今也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
Buffer:缓冲区,一个用于存储速度不一样步的设备或优先级不一样的设备之间传输数据的区域。 经过缓冲区,可使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操做进程不发生间断。
Free中的buffer和cache:(它们都是占用内存)
buffer : 做为buffer cache的内存,是块设备的读写缓冲区
cache: 做为page cache的内存,文件系统的cache
若是 cache 的值很大,说明cache住的文件数不少。若是频繁访问到的文件都能被cache住,那么磁盘的读IO 必会很是小。
$ cat /proc/meminfoMemTotal: 15728640 kB MemFree: 116196 kB Buffers: 0 kB Cached: 13448268 kB ……
这台服务器总共有 8GB 物理内存(MemTotal),3GB 左右可用内存(MemFree),343MB左右用来作磁盘缓存(Buffers),4GB左右用来作文件缓存区(Cached)。 用free命令也能够查到这几个值,注意单位是kB。
3、磁盘IO
1.良好状态指标
iowait % < 20% 提升命中率的一个简单方式就是增大文件缓存区面积,缓存区越大预存的页面就越多,命中率也越高。 Linux 内核但愿能尽量产生次缺页中断(从文件缓存区读),而且能尽量避免主缺页中断(从硬盘读),这样随着次缺页中断的增多,文件缓存区也逐步增大,直到系统只有少许可用物理内存的时候 Linux 才开始释放一些不用的页。
2.监控工具
sar
$ sar -d 2 3 (2秒一次 共3次) Linux 3.10.83-1-tlinux2-0021.tl1 (xgame_9_zone1) 06/22/17 _x86_64_ (48 CPU) 16:50:05 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:50:07 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16:50:07 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:50:09 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16:50:09 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 16:50:11 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
重要参数:
await表示平均每次设备I/O操做的等待时间(以毫秒为单位)。 svctm表示平均每次设备I/O操做的服务时间(以毫秒为单位)。 %util表示一秒中有百分之几的时间用于I/O操做。
若是svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,若是await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
若是%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工做,该磁盘可能存在瓶颈。
$ iostat -x(选项 -x 用于显示和io相关的扩展数据)
Linux 3.10.83-1-tlinux2-0021.tl1 (xgame_9_zone1) 06/22/17 _x86_64_ (48 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.46 0.00 2.75 0.01 0.00 94.78 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 153.95 0.00 1.02 0.47 0.00
查看哪一个进程占IO:iotop,效果和top看cpu同样。 查看某个进程打开的文件:/proc/${pid}/fd
4、Network IO
对于UDP
1.良好状态指标
接收、发送缓冲区不长时间有等待处理的网络包
2.监控工具
netstat
对于UDP服务,查看全部监听的UDP端口的网络状况
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:64000 0.0.0.0:* - udp 0 0 0.0.0.0:38400 0.0.0.0:* - udp 0 0 0.0.0.0:38272 0.0.0.0:* - udp 0 0 0.0.0.0:36992 0.0.0.0:* - udp 0 0 0.0.0.0:17921 0.0.0.0:* - udp 0 0 0.0.0.0:11777 0.0.0.0:* - udp 0 0 0.0.0.0:14721 0.0.0.0:* - udp 0 0 0.0.0.0:36225 0.0.0.0:* -
RecvQ、SendQ为0,或者不长时间有数值是比较正常的。
对于UDP服务,查看丢包状况(网卡收到了,可是应用层没有处理过来形成的丢包)
$ watch netstat -su Udp: 278073881 packets received 4083356897 packets to unknown port received. 2474435364 packet receive errors 1079038030 packets sent
packet receive errors 这一项数值增加了,则代表在丢包。
对于TCP(来自davidshan单卫的经验,thx~)
1.良好状态指标
对于TCP而言,不会出现由于缓存不足而存在丢包的事,由于网络等其余缘由,致使丢了包,协议层也会经过重传机制来保证丢的包到达对方。
因此,tcp而言更多的专一重传率。
二、监控工具
经过snmp能够查看各层网络协议的收发包的状况
$ cat /proc/net/snmp | grep Tcp Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts Tcp: 1 200 120000 -1 78447 413 50234 221 3 5984652 5653408 156800 0 849
重传率 = RetransSegs / OutSegs
至于这个值在多少范围内,算ok的,得看具体的业务了。
java性能分析 linux,linux 系统性能分析相关推荐
- Windows五种IO模型性能分析和Linux五种IO模型性能分析
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...
- 超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下
如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然.别慌,这里有一款低开销.自带火焰图.让你大呼好用的 Java 性能分析工具 - async ...
- idea 查看jsp是否被引用_IDEA集成Java性能分析神器JProfiler
阅读文本大概需要10分钟. <eclipse集成Java性能分析神器JProfiler>讲解了eclipse集成Jprofiler,这篇讲解一下IDEA如何集成JProfiler. 1.在 ...
- Java 性能分析工具 , 第 3 部分: Java Mission Control
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
- 开源java性能分析工具_Java性能监控:您应该知道的5个开源工具
开源java性能分析工具 鲜为人知但有用:开源应用程序性能监视的状态 对于任何应用程序来说,最重要的事情之一就是性能. 我们要确保用户获得他们能获得的最佳体验,并想知道我们的应用已启动并正在运行. 这 ...
- Java 性能分析工具一览(JDK自带)
Jdk自带的监控程序 1. jstat 分析JVM HEAP占用情况 2. jps 查看JVM 进程 3. jmap 分析内存对象占用情况 4. jstack 查看JVM 调用堆栈情况 5. hppr ...
- 各种框架性能分析,和语言性能分析
作者:find goo 链接:http://www.zhihu.com/question/36032573/answer/94592816 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非 ...
- 【JAVA】java性能分析之线程DUMP分析
系统上线后,系统可能会出现一些迟钝.卡死现象,这个时候就需要我们对系统进行性能方面的优化.本文将大概介绍一下,性能问题的解决思路,以及一次应用系统操作缓慢的分析实操. 一.定位问题方向 首先,查看服务 ...
- java性能分析工具_java性能分析工具
如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jia ...
- Java性能分析点滴
性能测试工具点滴 中说明了性能测试的工具选择,如果软件存在性能问题,我们改如何解决呢?此时一些性能分析工工具会起到作用. 名词 http://en.wikipedia.org/wiki/Profili ...
最新文章
- JavaScript原型链以及Object,Function之间的关系
- 教你怎么修改个性开机画面
- android fitsSystemWindows的使用
- IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权
- 结合使用位置实参和任意数量实参
- 1.7 空间正交分解
- 0118——RTLabel和正则表达式
- HBase权威指南 高清中文版 PDF(来自linuxidc)
- 如何发布第一个属于自己的npm包
- 病毒分析之伪装360主动防御病毒分析_XiaoBa-20
- rx584白牌救砖心得
- java扫码枪对接支付宝,支付宝扫码枪如何应用?
- 联想ghost重装系统_联想笔记本系统重装图文教程
- linux文件授权用户创建
- 计算机论文的技术路线图,怎么写好论文开题报告技术路线流程图
- 3dmaxs坐标轴不显示灰色显示(没有坐标轴箭头)
- 人脂肪前体细胞,研究糖尿病胰岛抵抗、肥胖的优秀体外模型
- 张拉拉再获融资,怎么做出一碗资本爱吃的兰州拉面?
- 嵌入式linux pam,PAM介绍(一)
- 伪原创视频模糊 视频md5值查询