【 在 yeshao (叶少·昨夜西风凋碧树) 的大作中提到: 】
: 这不就是了么?我没有说load高不是个问题,我只是说域值不是1而已。
load 的值是多少都不是很重要,他最重要的是一个值是 1 。
当他超过 1 时表示,机器已经无法处理即时的情况,必需要等待排程。
请你思考一下,当一个程式是无限回圈,他每秒可以跑 1000 个回圈。
这时候他吃住全部 cpu 。 load = 1
当你跑两只时,两只各每秒跑 500 个回圈,合起来是 1000 个回圈。
这时候 load = 2
你跑很多很多只程式, load 会一直往上加,但是总共你就是只能跑 1000 个回圈。
事实上根本跑不到 1000 个,因为要扣掉系统排程所花得 cpu time 。
所以 load = 1 是机器的极限。
当 bbs 的 load 超过 1 时,事实上分给每个人的资源就开始变少。
但是使用者可能一开始根本感觉不出来 1/1000 秒的延迟。
但是当延迟到了 1 秒使用者就会觉得慢,而觉得慢得时候 load 是多少不一定。
看起来很像温度计,实际上不是。因为现在你只考虑到有互动的部份,延迟所产生的效应
不会在互动感觉出来。但是总是有不是互动的程式,例如信件,转信,这些都不是
互动上得问题,当信件无法即时处理,他就会开始 queue 起来, queue 起来的结果会
让系统必需花时间解决这些 queue 的问题而更糟糕。转信无法即时转完,便会开始
影响到下一次的转信,一些收寻功能需要大量 cpu 时间的无法即时跑完,会彼此互相
影响, load 会开始不以正常的线性往上爬。
所以会发现原本 load = 1 可以跑一千人,可是 load = 2 却不是两千人。
可能不到一千五百人,同样方式计算,会发现到某个临界点, load 狂加
也多跑不了一个人。
我在 bbs 上 load 花了很多时间研究,碰上几百几千的状况多得是,
不过我还是要强调:
load = 1 绝对是个关键,而且管理者应该谨慎处理的状况。
以 load 超过 1 而机器正常执行而沾沾自喜的,绝不可取。
--
FROM 210.85.196.23