性能调优以及分析

1 内存:

free 命令查看

2 CPU

  1. 查看负载  ,通过top 或者uptime 来查看。对于平均负载来说,理想值是为CPU核数。

    uptime 结果

     17:25:14     up 320 days,  3:15,  2 users,         load average:   0.11,       0.24,         0.28

    当前时间    当前运行时间       有几个用户登录      负载       1分钟负载 5分钟负载 15 分钟过负载

    平均负载含义:是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
    当负荷达到5.0,就表明你的系统有很严重的问题,平均负载并不等于CPU使用率。

    平均负载升高有以下几种可能:

    1 平均负载高有可能是 CPU 密集型进程导致的;

    2 平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;

    3 当发现负载高的时候,你可以使用 mpstat、pidstat,iostat 等工具,辅助分析负载的来源

  2. 查看CPU信息 

    1. 通过查看/proc/cpuinfo 可以查看CPU信息

    2. cat /proc/cpuinfo | grep 'model name' | wc -l 可以查看CPU核数

3 磁盘

top中 %CPU列,有一个wa指标,表示等待io操作占整体的CPU百分比,比列越高,说明CPU等待io的时间越多,说明需要进行io 优化

df

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

du

常用 : du -sh ./* 显示当前文件夹下所有目录信息

可以查看某个文件或某个目录的所占空间

-h 以人类的方式显示

-s 显示总计,不显示文件大小

--max-depth=1  查看当前目录下一级子文件和子目录占用的磁盘容量,如果不加这个选项的话,会递归的吧所有目录都列出来,很恶心

iostat  (只能看到全局)

tps 磁盘当前每秒随机读写的操作,后面的是当前磁盘每秒的写入大小与读大小

iotop 

可以查看每个进程对应的io 情况

stress 可以模拟想磁盘插入数据,来进行检测

4 虚拟内存

vmstat 是虚拟内存统计,可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析

vm delay count   delay 表示间隔时间,count表示显示次数,如果都不加的话,只显示一条

pidstat  用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况.

没有任何参数显示所有的。

-w 显示进程上下文切换信息

-p 显示指定的进程id

-u:默认的参数,显示各个进程的cpu使用统计

-r:显示各个进程的内存使用统计

-d:显示各个进程的IO使用情况

5 查看进程以及线程情况

1 ps :

ps aux 可以查看所有运行的进程

-mp pid -o THREAD,tid,time 可以查看pid对应的所有线程,以及每个线程的具体情况

-T -p pid  列出进程所有的线程,相当于上述的简化版,只有tid,没有其他的

2 top (推荐使用,比较简单)

top -H -p pid ,可以动态的查看, 结果的pid 即线程id 

3 /proc/pid/status

可以查看进程详细信息

6   java 

1 jstack pid

堆栈跟踪工具,用于生成当前时刻的线程快照。可以定位线程出现的问题。

可以查看当前堆栈信息,可以查看线程使用情况。 可以使用 grep grep tid -A30 来获取指定的信息,这里的tid需要转化为16进制。可以使用 printf '%0x' 123 来获取 。 也可以通过Thread.getAllStackTraces方法 来获取,把信息做成一个html页面,就可以动态显示。

2 jmap pid 

内存映像工具,可以用于生产对转存快照。

命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

heap: 显示Java堆详细信息   jmap -heap pid 

histo[:live]: 显示堆中对象的统计信息   jmap -histo:live ,如果指定了live选项,那么只会计算活动的对象

clstats:打印类加载器信息 , jmap -clstats pid 

finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象

dump:<dump-options>:生成堆转储快照,并输出到文件,  jmap –dump:file=xxx pid 

F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.

help:打印帮助信息

J<flag>:指定传递给运行jmap的JVM的参数

3 jps

显示当前运行到虚拟机上的所有java程序,类似于linux的ps

默认显示pid 和启动类

-m 可以显示具体信息,包括启动时候的参数

4 jstat 

jstat -gcutil 16511 1000 10       在1000毫秒内 显示 10次  16511进程 gc信息
虚拟机统计信息监视工具。

gcutil 结果分析

S0: Survivor space 0 utilization as a percentage of the space's current capacity. Survivor0 使用了该总空间的百分比

S1: Survivor space 1 utilization as a percentage of the space's current capacity. Survivo 1 

E: Eden space utilization as a percentage of the space's current capacity. 新生代

O: Old space utilization as a percentage of the space's current capacity. 老年代

M: Metaspace utilization as a percentage of the space's current capacity. 元空间/永久代,Java1.8 可能为P

CCS: Compressed class space utilization as a percentage. 压缩类空间利用率为百分比。

YGC: Number of young generation GC events. 新生代从启动为止的GC次数

YGCT: Young generation garbage collection time. 新生代垃圾收集总时间,单位为s

FGC: Number of full GC events. FullGC次数。

FGCT: Full garbage collection time. FullGC总时间

GCT: Total garbage collection time. 垃圾回收总时间。

5 jinfo

java信息配置工具,可以实时查看和调整虚拟机的各项参数。

no option 输出全部的参数和系统属性

-flag name 输出对应名称的参数

-flag [+|-]name 开启或者关闭对应名称的参数

-flag name=value 设定对应名称的参数

-flags 输出全部的参数

-sysprops 输出系统属性

6 jvisualvm :

可视化查看java进程信息。

分析dump文件: https://blog.csdn.net/lkforce/article/details/60878295

远程连接: https://www.cnblogs.com/gossip/p/6141941.html

6 分析 Java :

https://mp.weixin.qq.com/s/g8KJhOtiBHWb6wNFrCcLVg

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章