zoukankan      html  css  js  c++  java
  • 性能优化相关

    CPU利用率

    [root@host ~]# cat /proc/cpuinfo |grep "processor"|wc -l
    4

    查看本机的核心数

    最常用CPU监测工具是TOP,当然TOP输出是一个瞬间值,如果想获取精确的数据,需要持续关注一段时间。 

    [root@host ~]# top

     top - 13:52:48 up 58 days,  4:48,  4 users,  load average: 0.00, 0.00, 0.00
    Tasks: 139 total,   1 running, 138 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3867260k total,  3762552k used,   104708k free,    16368k buffers
    Swap:  8191992k total,  2787096k used,  5404896k free,    75704k cached        

      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                           
     9924 root      20   0 2849m  62m 5028 S  0.3  1.7  16:52.53 java                                                                                                               
    10367 root      20   0 2779m 157m 5916 S  0.3  4.2   9:32.92 java                                                                                                               
    26374 root      20   0 4721m 409m 6404 S  0.3 10.8   2:28.76 java                                                                                                               
    27826 root      20   0 15032 1352 1008 R  0.3  0.0   0:00.08 top                                                                                                                
        1 root      20   0 19232  496  364 S  0.0  0.0   0:00.55 init                                                                                                               
     .......................

    TOP的使用主要看两个值,其一是总体使用值,其最大值是100%, 第三行Cpu(s),前面0.2%,0.1%分别是用户态和内核态的利用率,而99.8%是CPU空闲率,从这个可以看出,本机的CPU部分基本是空闲的;其二可以看相关进程,看它的“%CPU”使用率,比如,PID为9924这个进程的占用率是0.3%,但是这里面的100%不是本机所有CPU的100%,而是单个核的100%。所以它的上限会是本机核数*100%。 

    内存的监测

    [root@host ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          3776       3641        135          0         14         72
    -/+ buffers/cache:       3554        222
    Swap:         7999       2745       5254

    关于内存的监测,常用的命令是free -m,通过这个命令可以查看系统内存的具体使用情况。其中total,used和free都很好理解,通过这三列可以看出此时系统总内存,已经使用内存和没有被使用的内存,而cached这列则表示有多少内存已经被Page Cache占用,但当系统内存吃紧的时候,Page Cache会立即被回收并分配给请求内存的应用程序,所以Page Cache也可以被视为处于free状态的内存。

    还有下面的Swap分区,如果used数值比较高,说明内存非常紧张,系统已经动用交换区,同时IO开销也会增长非常明显。当发现内存不够用的情况,可以考虑重启或者关闭那些占

    用很多内存的进程。

    I/O性能的监测

    [root@host ~]# iostat –xz 1       
    Linux 2.6.32-431.el6.x86_64 (host)      2018年08月23日  _x86_64_        (4 CPU)

    avg-cpu:  %user   %nice %system %iowait  %steal   %idle            0.31    0.00    0.19    0.28    0.00   99.22

    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

    avg-cpu:  %user   %nice %system %iowait  %steal   %idle            0.25    0.00    0.00    0.00    0.00   99.75

    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

    avg-cpu:  %user   %nice %system %iowait  %steal   %idle            0.25    0.00    0.25    2.24    0.00   97.26

    关于I/O性能,可以通过iostat这个命令来观察I/O的性能,(sda是主硬盘),虽然参数比较多,但可以主要关注这两个参数:

    其一是await,它代表了IO操作的平均等待时间,单位是毫秒,这也是应用和磁盘之间操作所要消耗的时间,包括等待和实际的操作,如果这个数值大,说明I/O资源非常忙或者有故障;

    其二是%util,也就是设备利用率,数值如果超过60,所以利用率很高,并会影响I/O平均等待时间,如果到100,那就说明设备已饱和了,只能添加更多I/O资源。

    网络方面的监测

    安装sar 

    yum -y install sysstat

    [root@host ~]# sar -n DEV  1 2     
    Linux 2.6.32-431.el6.x86_64 (host)      2018年08月23日  _x86_64_        (4 CPU)

    14时50分48秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

    14时50分49秒        lo     18.00     18.00      2.09      2.09      0.00      0.00      0.00

    14时50分49秒      eth0      1.00      1.00      0.06      0.17      0.00      0.00      0.00

    14时50分49秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

    14时50分50秒        lo      9.00      9.00      0.75      0.75      0.00      0.00      0.00

    14时50分50秒      eth0      1.00      1.00      0.06      0.37      0.00      0.00      0.00

    平均时间:       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

    平均时间:          lo     13.50     13.50      1.42      1.42      0.00      0.00      0.00

    平均时间:        eth0      1.00      1.00      0.06      0.27      0.00      0.00      0.00

    代码方面的优化

     写入优化,传统关系数据库的写入是一行一行的写入,而常见大数据产品的写入是批量的写入,并且每次批量写入之后,都会生成新的数据文件,并且这个数据文件是不会被修改的。所以导入数据粒度小的话会导致很多细小文件产生,这样会导致更多的I/O操作,所以在使用大数据产品的时候,导入数据规模是越大越好,常见的规模在100MB以上为佳。

    尽可能并行,尽可能地通过并行来提升性能,主要有两个方式:其一是每台机器上面部署更多的进程来压榨硬件资源;其二是提升单个进程的多线程数,这种方式比第一种更简单,风险也更低。总体而言,尽量使每台机器所使用到的线程数可以达到系统自身线程数的80%。

    尽可能的压缩和列存

    合理使用分区

    join的优化, 小表可以使用广播

  • 相关阅读:
    js 变速动画函数
    js 获取滚动条事件
    js 获取任意一个元素的任意一个样式属性的值
    js 三大事件(鼠标.键盘.浏览器)
    关于数组的一些方法
    mvc获取时间戳
    html5响应式设置<meta>
    jq遍历url判断是否为当前页面然后给导航上色
    mvc正则@符号js报错解决办法
    无法在提交表单前通过ajax验证解决办法
  • 原文地址:https://www.cnblogs.com/playforever/p/9523370.html
Copyright © 2011-2022 走看看