解决方法
负载意味着:如果单cpu系统上有多个进程,它们看起来是并行运行的.但事实并非如此.实际发生的事情:内核给进程提供1/100秒,然后用中断中断运行.并将下一个1/100秒提供给另一个流程.
实际上,“哪个过程应该在下一个1/100秒间隔?”这个问题将由复杂的启发式方法决定.它被命名为任务调度.
当然,被阻止的进程,例如他们正在等待他们从磁盘读取的数据,可以免于此任务调度.
什么负载说:当前有多少进程正在等待下一个1/100秒的时间帧.当然,这是一个平均值.这是因为你可以在cat / proc / loadavg中看到多个数字.
多cpu系统中的情况有点复杂.有多个cpus,其时间范围可以给予多个进程.这使得任务调度有点 – 但不是太多 – 更复杂.但情况是一样的.
内核是智能的,它试图共享系统资源以获得最佳效率,并且它已经接近(有一些小优化的东西,例如,如果一个进程在相同的时间运行最长的时间会更好cpu因为缓存考虑因素,但它们并不重要).这是因为如果我们有加载8,那意味着:实际上有8个进程在等待它们的下一个时间片.如果我们有8个cpus,我们可以将这些时间片一对一地给予cpus,因此我们的系统将得到最佳使用.
如果您看到顶部,您可以看到实际运行进程的数量非常低:它们是由R标记的进程.即使在非真正的核心系统上,它通常低于5.这部分是因为从磁盘或网络等待其数据的进程也被暂停(在顶部用S标记).负载仅显示cpu使用情况.
还有一些工具可以测量磁盘负载,它们至少应该像cpu使用情况监控一样重要,但不知怎的,它在我们的专业系统管理员世界中并不是那么出名.
Windows工具通常将负载除以cpu的实际数量.这导致一些专业的Windows系统管理员在这种以cpu分割的意义上使用系统负载.他们没有权利,在你向他们解释之后可能会更开心.
在超线程cpu的情况下,有一个有趣的副作用:加载一个cpu会使其超线程对速度变慢.但是这发生在正常任务调度处理的更深层上,尽管它可以(并且应该)影响调度程序的流程移动决策.
但从我们目前的观点来看 – 决定系统负荷的因素 – 也无关紧要.