上一篇主要从总体介绍了高并发&性能优化的相关思路和方法,本篇主要介绍系统监控工具。
【CPU查看工具】
------top命令(性能)
进入top命令后,按1即可看到每核CPU的运行指标与详细指标:
咱们依次说明下红框里面的参数:
?硬中断&软中断
硬中断是由与系统相连的外设(网卡,硬盘等)产生的,如当网卡收到一个数据包。
软中断是正在运行的应用产生的,通常指的是一些对于I/O的操作,软中断可放到中断之后执行。
一般情况下,我们会比较关心id(空闲 CPU 百分比),可以从整体上大致看出CPU的真实利用率。
------uptime(负载)
其实,在top里面,已经可以看出平均负载的具体数值。
但是我们也有另外一种方式,分别显示最近 1min、5min、15min 的数值:
一般负载达到1*CPU核数,我们可以认为系统负载达到了极限。
------vmstat(CPU 繁忙程度)
查看CPU的繁忙程度,可以通过vmstat查看:
图中红框需要特别关注一下:
如果我们想进一步查看固定进程的上下文切换数量,可以通过以下命令查看:
【内存查看工具】
首先,我们从操作系统层面看一下内存的基本结构:
先简单解释下上面几个名词:
------逻辑内存
当我们写了一个程序,然后去查看它的底层汇编实现的时候,看到的内存地址,其实不是真正的物理内存地址,叫逻辑内存,逻辑内存是通过MMU映射到真实的物理内存地址上的。
------MMU
内存管理单元。
虚拟地址和物理地址的映射关系存储在页表中,页表是分级的,64位系统一般都是3~5级。
在硬件上会有一个叫做页表基地址寄存器,它存储PGD页表的首地址。
MMU就是根据页表基地址寄存器从PGD页表一路查到PTE,最终找到物理地址(PTE页表中存储物理地址)。
------TLB
translation lookaside buffer,地址转换后援缓冲器(快表)。
TLB其实就是一块高速缓存,缓存虚拟地址和其映射的物理地址,避免了每次都需要一级一级查找页表获取物理地址。
------虚拟内存
逻辑地址可以映射到两个内存段上:物理内存和虚拟内存。
虚拟内存就是物理内存不够用的时候把一些很少访问的内存数据转存到硬盘上,然后把这部分内存腾出来分配给其它应用。
------top
了解了基本概念之后,我们再来了解一下top在内存查看中的应用:
红框中的三个参数是内存相关的:
【I/O】
I/O 设备可能是计算机里速度最慢的组件了,它指的不仅仅是硬盘,还包括外围的所有设备。
I/O设备和内存之间的速度差是非常大的,如何去缓解这个问题呢?
缓冲!缓冲区是现在解决速度差的唯一方法,不论是cpu->内存,还是内存->硬盘。
首先,我们回顾一下之前说过的"top"和"vmstat",里面有一个参数,叫"wa",它是最能体现I/O的繁忙程度了。如果你的应用有大量写入文件的操作(比如日志),I/O wait就可能会非常高。
------iostat
当然,查看I/O也有一个很好的工具,就是iostat,可以通过sysstat安装。
我们来大概了解一下主要参数:
------零拷贝
说到I/O了,我们再衍生一下,讲一个通常的优化手段。
比如,我们在java里面进行一个简单的文件拷贝,在内核的支持下,零拷贝少了一个步骤,那就是内核缓存向用户空间的拷贝,这样既节省了内存,也节省了 CPU 的调度时间,让效率更高。
本篇先到这里,下一篇,咱们介绍性能测试工具。