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

操作系统性能监控

服务端程序除了应用本身性能外,依赖与服务器本身的性能。服务器性能指标包括:CPU、内存、网络IO和磁盘使用率。

今天学习了内存监控的部分。

为什么要监测内存

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

监测内存使用率

[[email protected] ~]# 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

抢占式上下文切换监控

[[email protected] ~]# 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性能优化权威指南》的读书笔记整理而来

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

时间: 2024-10-01 21:46:46

操作系统性能监控之内存监控的相关文章

操作系统性能监控

1. 概述 应用的性能极限是服务等级协议中关注的重点.找到性能极限的关键在于知道该监控哪些数据.监控软件栈的哪些部分以及使用哪些工具.本篇文章将介绍需要监控的操作系统数据以及可用的操作系统性能监控攻击,还会给出一般性指导原则.主要涉及的操作系统是Windows 7和Ubuntu 12.04.5 LTS.我们更多的是介绍哪些是需要重点监控的系统属性以及为何要监控他们. 找到性能问题的第一步是监控应用的行为,通过监控提供的线索,可以将性能问题进行归类. 首先要给出几个概念的定义:性能监控,性能分析和

Linux系统性能10条命令监控

Linux系统性能10条命令监控 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n

iOS微信内存监控

WeTest 导读 目前iOS主流的内存监控工具是Instruments的Allocations,但只能用于开发阶段.本文介绍如何实现离线化的内存监控工具,用于App上线后发现内存问题. FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样.Facebook早在2015年8月提出FOOM检测办法,大致原理是排除各种情况后,剩余的情况是FOOM,具体链接:https://code.facebook.com/pos

Linux 内存监控

init进程是系统中的第一个进程,PID永远为1 查看系统在中静态进程的统计信息 命令: ps 格式: ps [可选项] ax: 显示所有的进程信息 -u: 使用以用户为主的格式输出进程信息 -e: select all processes 显示系统内的进程信息 -l: 使用长格式显示进程信息 -f: full 使用完整的格式显示进程信息 ps aux命令 [[email protected] tmp]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT ST

AWS Centos磁盘和内存监控脚本

在centos上使用aws硬盘和内存监控脚本,会发现脚本出错,无法正常工作,这是因为aws的官方文档中提到脚本没有在centos上做过测试,并不能保证脚本能使用 如何解决呢,需要安装以下软件: yum install -y perl-CPAN       exportPERL_MM_USE_DEFAULT=1 # setup defaultconfig perl -MCPAN -e shell #进入MCPAN Shell,自动生成默认配置,并退出       # 类似于yum,下载安装各种包,

Zabbix 3.0 监控交换机(3)--CPU、内存监控及配置Trigger

要监控交换机的CPU.内存关键在于找到正确的OID,关于怎么寻找OID请参考以下博文. http://tryrus.blog.51cto.com/10914693/1788833 看这篇博文之前请确定已对zabbix的基本操作已有了解,有不明白的地方可以看我之前写的博文. http://tryrus.blog.51cto.com/10914693/1772271 http://tryrus.blog.51cto.com/10914693/1782062 一.配置环境 CentOS 7 Linux

MySQL 内存监控

上一篇blog介绍了因为sql查询information_schema表而导致内存暴涨的case. 今天顺便做了一个thd内存的监控: 先来介绍下MySQL的内存: 1. 线程内内存:thd->mem_root, 线程在执行sql的过程中,申请的内存从thd->mem_root进行分配,在sql结束的时候释放. 2. 线程外内存:对象专有的mem_root; 比如,table, table_share,st_transactions等都有专有的mem_root. 所以: 对于sql引起的内存暴

nagios监控linux主机监控内存脚本

说明 工作包括两部分监控端(一二三)和被监控端(四) 一.nrpe.cfg中添加脚本 nrpe.cfg中添加命令索引 command[check_used_mem]=/usr/local/nagios/libexec/check_used_mem.sh 80 90 说明:实际内存使用量超过80%警告:超过90%严重警告 二.添加具体脚本 参考脚本check_used_mem.sh warn=$1 critical=$2 all=`free | sed -n '2p' | awk '{print

tomcat完结篇,JVM状态监控与内存调优。

本篇合适对tomcat和JVM有一定了解的朋友. 常用的内置变量介绍: CATALINA_BASE  //用于设定可以具有写权限或者自定义部分的文件存放位置,适用场景,需要在一节点上启动多个tomcat实例,就可以定义多个CATALINA_BASE. CATALINA_OPTS //定义JVM的运行属性 JAVA_OPTS  //定义多个JVM相同运行属性. JAVA_HOME  //用于设定java或JDK运行时候的本地位置. JRE_HOME   //这是一个JAVA_HOME的别名. 了解