• Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具


    一:CPU

    1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比。

    系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU高意味着共享资源有竞争或者I/O设备之间有大量的交互。

    提高应用性能和扩展性的一个目标就是尽可能降低系统态CPU使用率。

    2. CPU运行队列就是那些已经准备好运行、正等待可用CPU的轻量级进程。

    当运行队列长度达到处理器的4倍或者更多时,系统的相应就非常迟缓了。

    解决运行队列长有两种办法:

    1). 增加CPU以分担负载;

    2). 分析系统中运行的应用,改进CPU使用率;

    1. vmstat

    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0 104956    868 825812    0    0     1     5   16   25  0  0 100  0  0

    r:CPU运行队列长度,值是运行队列中轻量级进程的实际数量

    us:用户态CPU使用率

    sy:系统态CPU使用率

    id:CPU空闲率

    2. top

    top - 09:42:04 up 3 days, 3 min,  1 user,  load average: 0.00, 0.01, 0.05
    Tasks: 108 total,   3 running, 105 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1015472 total,   104568 free,    84224 used,   826680 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.   727760 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                          
      784 root      20   0  553064  16340   5748 S  0.0  1.6   0:21.48 tuned                                                                                            
      743 root      20   0  110512  13140    676 S  0.0  1.3   0:00.13 dhclient                                                                                         
     9678 polkitd   20   0  527456  13128   4680 S  0.0  1.3   0:00.09 polkitd                                                                                          
        1 root      20   0   43684   6176   3804 S  0.0  0.6   0:05.08 systemd                                                                                          
    

    上半部分是整个系统的统计信息,下半部分是进程的统计信息。

    P 按CPU占用率排序
    M 按内存占用率排序
    T 按CPU占用时间排序
    H 查看详细线程信息

    二:内存

    1. 系统在使用页面交换或虚拟内存时,访问swap中内存以及JVM垃圾回收swap中内存时,都存在内存置换(从swap中置换到内存),性能肯定有问题;

    2. 锁竞争,一般来说让步时钟周期占用3%—5%或更多,说明java应用正面临锁竞争;

    vmstat

    free:可用空闲内存;

    si:内存页面换入;

    so:内存页面换出;

    pidstat

    [test ~]$ pidstat -w -I -p 7938 5
    Linux 3.10.0-229.20.1.el7.x86_64 (test) 	11/13/2016 	_x86_64_	(1 CPU)
    
    07:56:42 PM   UID       PID      cswch/s     nvcswch/s  Command
    07:56:47 PM     0      7938      3500.00     0.00  java
    07:56:52 PM     0      7938      3500.00     0.00  java
    07:56:57 PM     0      7938      3500.00     0.00  java
    
    Average:        0      7938      3500.00     0.00  java
    

    cswch/s:让步式上下文切换;

    例如:处理器为3.0GHz双核,每个处理器上下文切换3500/2=1750,耗费的时钟周期1750*80000=140000000,因此上下文切换所占比例为:140000000/3000000000=4.7

    三:网络

    分布式Java应用的性能和扩展性受限于网络带宽或网络I/O的性能。

    nicstat

    需要编译安装(https://blogs.oracle.com/timc/tags/linux)

        Time      Int   rKB/s   wKB/s   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
    13:25:57     eth0    2.34    1.77    2.84    2.29   842.6   789.6  0.00   0.00
    13:25:57       lo    0.00    0.00    0.00    0.00   85.49   85.49  0.00   0.00
    

    Int:网络接口设备名

    rKb/s:每秒读取的KB数

    wKb/s:每秒写入的KB数

    %Util:网络使用率

    Sat:饱和度

    四:磁盘

    iostat

    [test ~]$ iostat -xm
    Linux 3.10.0-229.20.1.el7.x86_64 (test) 	11/13/2016 	_x86_64_	(1 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.26    0.00    0.22    0.06    0.24   99.23
    
    Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    xvda              0.00     0.22    0.11    0.38     0.00     0.00    16.79     0.00    6.15    7.51    5.74   2.05   0.10
    xvdb              0.00     0.00    0.00    0.00     0.00     0.00    18.07     0.00    7.04   10.93    6.36   2.75   0.00

    五:统计

    sar

    sar 1 3 查看当前CPU数据,每一秒刷新一次,统计三次
    sar -q 查看平均负载
    sar -r 查看内存使用状况
    sar -W 查看页面交换发生状况
    sar –b 查看I/O和传送速率的统计信息

  • 相关阅读:
    Java修饰符
    java中接口的定义
    抽象类
    final关键字的特点
    hdu6489 2018 黑龙江省大学生程序设计竞赛j题
    POJ 3268 (dijkstra变形)
    poj 2253 floyd最短路
    poj1681 Network
    bzoj1202 狡猾的商人
    Nastya Is Buying Lunch
  • 原文地址:https://www.cnblogs.com/xiongpq/p/6059340.html
Copyright © 2020-2023  润新知