压测时收到过CPU和Load的高警告,如果是单体偶发性的话,经常被认为是“汇主机切断引起的”,这是真的吗? 是什么引起了这些指标的高度? 网络、磁盘还是高并发性? 可以定位的工具是什么? TOP,PS,vmstat? CPU高Load高度和CPU低Load高度,不同的特征是什么?
背景知识
LINUX进程状态
在LINUX 2.6或更高版本的内核中,进程通常有七种基本状态: D-不可中断睡眠、R-可执行、S-可中断睡眠、T-休眠状态、T-跟踪状态、X-死亡状态和Z-僵尸状态。
D (TASK_UNINTERRUPTIBLE )不能中断睡眠状态。 顾名思义,处于此状态的进程正在休眠,不允许被其他进程或中断(异步信号)中断。 因此,除非重新启动系统,否则此状态的进程不能使用kill -9杀死(kill也是信号)(是的。 就这样脑子硬)。 但是,这种状态一般是由I/O等待(例如,磁盘I/O、网络I/O、外围设备I/O等)引起的,出现时间非常短,除非I/O HANG死了,否则不会被PS或TOP命令捕获。 SLEEP状态进程不占用CPU资源。
R (TASK_RUNNING )是可执行状态。 这种状态的进程都在CPU的可执行队列中,可以是执行中或等待执行,即工作中或上班中。

S (TASK_INTERRUPTIBLE )可以中断休眠状态。 与d不同,这种状态的过程也在睡眠中,但允许中断。 这种过程通常等待某个事件的发生(例如套接字连接、信号量等)而挂起。 这些时间完成后,进程将唤醒并进入r状态。 如果不是高负载,系统的大部分进程都处于s状态。 SLEEP状态进程不占用CPU资源。
Tt (__TASK_STOPPED __TASK_TRACED )暂时停止or跟踪状态。 两种状态的进程都处于停止执行的状态。 不同之处在于,暂停状态通常接收SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOUT这四种信号并被停止,而跟踪状态则是由于过程被另一个过程跟踪(例如gdb断点) 休眠状态的进程释放所有占用资源。
Z (EXIT_ZOMBIE ),僵尸状态。 此状态的进程实际上已经结束,但父进程没有收回其资源(例如进程描述符、PID等)。 僵尸状态的进程释放了除进程入口以外的所有资源。X (EXIT_DEAD ),死亡状态。 进程的真正结束状态。 这种状态在普通系统中是无法捕捉到的。
加载平均CPU利用率
就系统性能而言,Load和CPU使用率是最直观的两个指标,这两个指标是怎么计算的呢? 彼此能等价吗?
CPU使用率
CPU的时间片通常分为四类:用户进程运行时间-用户时间、系统内核运行时间-系统时间、空闲时间-空闲时间、被断开时间- Steal Time。 除了Idle Time,其馀的时间CPU都处于运行状态。