Linux监控和Java性能监控命令

常见性能分析命令

1.1 查看CPU使用

  • pidstat
  • vmstat
  • mpstat
  • sar
  • top

统计机器总CPU使用情况

# 1.查看本机CPU个数和利用率
lscpu

CPU(s):                2           //总cpu数量
On-line CPU(s) list:   0,1   //在线的cpu的编号;
Thread(s) per core:    2     // 每个Core 核心的线程数
Core(s) per socket:    1      //每个cpu插槽核数
Socket(s):             1          //cpu插槽数
Model name:            Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
CPU MHz:               2294.685  // cpu主频 
L1d cache:             32K  //一级高速缓存dcache存储数据
L1i cache:             32K  //一级高速缓存 icache存储指令

//用top查看 cpu个数, 且显示每个cpu的使用率
top , 再按 1

//  查看指定CPU (编号0)的情况
mpstat -P 0 3,5  //查看指定编号CPU 0, 0, 1, ALL


# 2. 查看CPU平均数据
top  // 本机资源实时利用, 第二行CPU资源信息;

sar -u 2 5 // 查看 CPU情况,

mpstat  2 5 // 查看ALL CPU的平均统计信息

vmstat 3 5 // 汇总3秒内的CPU/Memory等资源情况; 


# 3. 查看各进程的CPU使用情况:
top // 对各进程的CPU等资源占用进行排序;

pidstat -u 2 5 // -u查看CPU情况, 可省略; 统计2秒内;


ps      // 查看前台进出
ps -aux  //查看所有后台进程

统计某进程的CPU使用情况

// 查看某进程(PID)的资源使用
pidstat -p {pid} -u 3 5    // -p指定pid, 

top -Hp {pid}  // 查看指定进程内的线程

pstree  {pid}  // 查看某进程的pstree树关系
pstree {pid} -p -a // -p 显示其子进程;  -a: 显示参数和命令; 

1.2 内存Memory 监控

内存监控相关命令

相关命令:

1.2.1 机器整体内存分析

sar -r 2 10  //查看本机内存

free -h -m

top , 再按E

vmstat -s -S M //  -s 显示内存相关统计信息及多种系统活动数量; 
    * -S(大写): 指定显示单位; K, 1024, M 1024*1024;



// 其他工具, 少用;
nmon , dmidecode, hwinfo , lshw,inxi,glances 等其他命令; 

某进程的内存监控

// 指定进程号{pid}
pidstat -r -p {pid} 2 5  // -r看内存,-p 指定pid
    - t: 显示其所有线程; 

top -Hp {pid}  // 


// 强大的内存映射命令: 支出其中每个内存位置;
pmap -d {pid} // -d:不显示头尾行; -x: 显示细节; 

    Address   Kbytes Mode  Offset           Device    
    00007f234498e000      4K r--s- commons-logging-1.0.3.jar
  * Address : 内存地址;
  * Kbytes : 字节大小;


// 2. Java 内存分析工具
jstat -gc {pid} 3000 5
// gc统计
jstat -gcutil  {pid} 3000 5
S0      年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1      年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E       年轻代中Eden(伊甸园)已使用的占当前容量百分比
O       old代已使用的占当前容量百分比
P       perm代已使用的占当前容量百分比
YGC     从应用程序启动到采样时年轻代中gc次数
YGCT    从应用程序启动到采样时年轻代中gc所用时间(s)
FGC     从应用程序启动到采样时old代(全gc)gc次数
FGCT    从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT     从应用程序启动到采样时gc用的总时间(s)


jmap -heap {pid} // 查看其堆内存;

jcmd {pid} help // 查看哪些可查看项;
jcmd {pid} VM.native_memory  // 查看堆外内存


// 其他Linux 内存分析工具: 
valgrind, dtrace 

查看磁盘Disk的使用

// # 查看磁盘
sar -d 2 10 

// 查看磁盘情况
iostat -c 2 10

查看网络Network的使用

// 查看网络流量
sar -n DEV 2 5 

其他命令

1. 查看机器负载
vmstat  2 10 -a

// 查看CPU 情况, 2秒间隔, 5次打印;

sar -r 2 10 # 查看内存

sar -n DEV 2 5 # 查看网络流量



1. 查看某进程 内存使用率
jstat -gcutil pid
jmap -heap pid

2. 查看进程的CPU使用率
jstat - pid

具体功能分析

jstack + top 分析进程中高耗线程

  1. 使用top命令分析出
1. 确定进程pid;  通过top/ jps等命令,确定要分析的进程pid:
top -c
jps

2. 查看该进程内, 有哪些线程,并对其cpu耗用排名: 可通过ps or top 等命令;
ps -Lfp pid
top -Hp pid
    # 将占用CPU最高进程中的线程打印出来,可以用 top -bn1 -H -p <pid> 命令

ps -mp pid -o THREAD,tid,time|sort -k2r    (推荐该命令)
    #打印进程内线程CPU排名; 其他tid一栏为线程Id;



3. 利用jstat + grep 打印模板线程情况
printf "%x\n" tid

jstack pid |grep 十六进制tid -A 10
    - jstack 1943 |grep 7c6 -A 10

# 查看该进程总共多少个线程
jstack 1943 |grep State |wc -l

监控分析工具的使用手册

Java Visual VM

连接远程 Visual VM办法:

启动jstatd 守护进程
在 JAVA_HOME/bin目录下, 新建 jstatd.all.policy 文件, 内如如下:

grant codebase "file:${java.home}/../lib/tools.jar" {    
    permission java.security.AllPermission;    
}; 

后台启动jstatd 守护进程

nohup $JAVA_HOME/bin/jstatd -J-Djava.security.policy=jstatd.all.policy &

以自己制定jstatd的端口,加-p <port> 参数,默认端口为1099.
在特定的java应中, 添加如下JVM参数:

// 
-Dcom.sun.management.jmxremote

// 这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
-Dcom.sun.management.jmxremote.port=10991
//指定了 JMX 是否启用 ssl
-Dcom.sun.management.jmxremote.ssl=false   
// 指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
-Dcom.sun.management.jmxremote.authenticate=false   
// 这个是配置 server 的 IP 的
-Djava.rmi.server.hostname=ldsver51

远程连接 1099端口;
直接点击: 远程 添加相应端口即可, 默认 10099

Linux时间设置和时间同步

Linux时间分成硬件时间和系统时间

  • 硬件时间: RTC, real time clock,真实时间:

    RTC在系统关机后, 仍然会计时; RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲主板上的晶振及相关电路组成的时钟电路的生成脉冲,RTC经过8254电路的变频产生一个频率较低一点的OS(系统)时钟TSC,系统时钟每一个cpu周期加一周期加一,每次系统时钟在系统初起时通过RTC初始化。8254本身工作也需要有自己的驱动时钟(PIT)

  • 系统时间: (System Clock): 系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值。在开机的时候会和硬件时间同步,之后也就各自独立运行了; 系统时间,是用CPU tick来维持的;
  • 时间差异原因: 默认情况下,系统时间和硬件时间,并不会自动同步, 互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU tick来维持的。这也是系统时间长时间运行时会产生时间偏差的原因

查看好设置硬件时间RTC

hwclock
clock 
timedatectl
// 修改RTC时间
clock --set --date='2018-03-12 08:30:45'
// 将系统时间,同步成RTC时间
timedatectl
clock --systohc  //从硬件时钟设置系统时间
clock -s
clock -w  // 从硬件时钟设置系统时间
hwclock -c  // 查看与系统时间的间隔;
timedatectl

设置系统时间(Systemtime)

date 
timedatectl
date -s '2018-03-23 04:30:45' // 设置系统时间;
clock -w //将RTC时间也设置成 当前系统时间;

关于时间同步

网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC

关于ntdp和Ntpdate

  • ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,一个是校准时间, ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。
  • 关于ntpdate: ntpdate立即同步,在生产环境中慎用ntpdate,一个是调整时间。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。

关于chrony同步时间

chrony sources -v // 查看有哪些时间源
date -s '2015-03-02 18:09:03'
chronyc -a makestep //手动立马同步时间;

问题: 当系统时间与ntp时间差 > 10秒时, 就不能正常的更新时间了,需要设置 vim /etc/chrony.conf
默认情况下,chronyd通过减慢或加快时钟速度来逐渐调整时钟。如果时钟与实际时间偏差太大,则需要很长时间才能纠正错误。步进时钟(时间跳变)可以快速修正偏差较大的时间误差,但步进时钟(时间跳变)能会导致一些程序异常,

# 默认这个 1.0 1 不行, 需要后面设置成 -1;
makestep 1.0 1
makestep 10 -1

makestep 10  1  
//解释 如果时间的误差小于10秒,则通过减慢或加快时钟速度来逐渐调整时钟。如果时间的误差大于10秒,在第1次更新时间时允许步进时间。
makestep 10 3 // 如果系统时钟的偏移量大于10秒,则允许在前三次更新中步进调整系统时钟
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容