码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统性能监控之内存监控

时间:2018-01-25 19:50:51      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:java   切换   log   linu   vpd   code   inux   物理内存   system   

操作系统性能监控

服务端程序除了应用本身性能外,依赖与服务器本身的性能。服务器性能指标包括:CPU、内存、网络IO和磁盘使用率。
技术分享图片
今天学习了内存监控的部分。

为什么要监测内存

当应用运行所需内存超过可用物理内存时,就会发生页面交换。通常会在硬盘上分配一个swap空间。当应用耗尽可用内存时,就会把不常用的内容放到swap空间里。 当访问被置换到swap空间的内容时,就需要把swap空间的内容加载到物理内存中,这种置换操作会大大影响应用的吞吐量和响应性
JVM垃圾收集器在进行置换操作时,性能也很差。垃圾收集器为了回收不可达对象,需要大量访问内存。如果java堆的一部分被置换出去,就必须先置换进来,在扫描存活对象,这会增加GC的时间。GC会造成jvm停顿。

监测内存使用率

[root@Hwseeker-Adx02 ~]# vmstat
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 4030152 1427780 1159168 87874912    0    0     1    15    0    0  4  1 94  0  0

其中si、so可以看到swap操作,free代表可用内存数。如果si和so很大,就代表发生了内存置换。

监控锁竞争

定义几个概念
让步试上下文切换:是指线程主动释放CPU
抢占式上下文切换:线程因为分配的时间片用尽被迫放弃CPU或被优先级更高的线程抢占,而失去执行机会

Java HotSpot VM从1.5开始,增加了锁机制优化。线程通过忙循环自旋尝试获得锁,如果若干次自旋后,没有获取成功,则挂起线程,等待唤醒后再次尝试获取。挂起和唤醒线程会导致让步试上线文切换。

让步试上下文切换耗费CPU时钟非常严重,通常高达80000个时钟周期
主频为3GHz的处理器每秒钟可用时钟周期为3,000,000,000

抢占式上下文切换监控

[root@dmp002 ~]# pidstat -w -I -p 29064
Linux 2.6.32-573.el6.x86_64 (dmp002.tiger.local)    2018年01月25日     _x86_64_    (24 CPU)

18时34分45秒       PID   cswch/s nvcswch/s  Command
18时34分45秒     29064     3500      0.02  java

可以用top命令,获取pid

pidstat -w显示系统每秒发生3500个上下文切换。处理器为3Ghz双核Intel CPU。因此虚拟处理器上下文切换为3500/2=1750,耗费的始终周期为1750*8000=140,000,000。3Ghz每秒钟周期数为3,000,000,000。浪费的始终周期为140,000,000/3,000,000,000=4.7%。

让步时钟周期占用超过3%,表明Java应用正面临锁竞争
本博文内容为《Java性能优化权威指南》的读书笔记整理而来

操作系统性能监控之内存监控

标签:java   切换   log   linu   vpd   code   inux   物理内存   system   

原文地址:http://blog.51cto.com/4436396/2065175

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!