《构建高性能web站点》——服务器并发处理能力–服务器进程
很多时候,web服务器的性能是我们最关注的地方,如果是纯静态资源的网站,web服务器的性能将是考虑的最主要的地方。
对于互联网这种高并发的情况,各种服务器都采用多进程或者多线程的方式来处理并发请求,这也就意味着要争夺资源,争夺资源就需要一定的规则,比如先来后到、VIP优先等。但是举个现在最remen和naocan的例子,北京的摇号买车,xx部门最后定下了一个八国联军进入中国时候的一个标语——中国人和狗不得入内 的规定,具体的我不多说了,这个比喻很形象。
继续技术上研讨,做技术的人,经常发牢骚,是因为从古到今,中国的技术都是从属与社会,中国发明了火药,只是一个历史,却重来没有一个当官的想到把它拿来强国,现在的中国也是这样,大家都自娱自乐,天天唱红歌,喝红酒,扯红蛋…..
总结1:系统级别的进程切换的过程——硬上下文切换
首先,进程有自己的独立内存地址空间,别人不能侵犯,但是CPU和寄存器资源有限,得共享。
被挂起的意思就是原来在CPU和寄存器中的数据被拿到内核维护的一段内存空间——内核态对战中。
进程被恢复的过程就是重新装入CPU和寄存器进行计算。
这个过程就向去政府银行取钱一样,经常存进去,这个得排队等待,还的取出来,这也得排队等待。
总结2:nmon这个东西,很强大,能看见很多不容易看见的东西
nmon 然后键盘输入k 可以看见一下信息
Kernel Stats ------------------------------------------------------|
| RunQueue 1 Load Average CPU use since boot time |
| ContextSwitch 91.9 1 mins 0.00 Uptime Days= 18 Hours= 4 Mins= 2 |
| Forks 0.0 5 mins 0.00 Idle Days= 17 Hours=22 Mins=40 |
| Interrupts 36.0 15 mins 0.00 Average CPU use= 1.23%
加粗的地方就是上下文切换的数据. 引用《高性能web站点》的一个数据,操作系统的维护最基本的工作的进程切换需要28.4次切换,当然在这个数量级别而已。
apache 用prefork 模式的时候进程切换远大于lighhttpd和nginx,好像并不在一个数量级。
总结3:top命令中几个很重要的数
RES 使用的物理空间
SWAP 使用的虚拟内存空间
VIRTual= RES+SWAP
通过这个计算你可以大概算出你的4G内存的服务器可以开启多少个httpd的进程了。
总结4:IOwait 这个东西(本来不算在进程这一块,一并总结了)
Cpu(s): 1.3%us, 0.7%sy, 0.0%ni, 95.3%id, 0.0%wa, 0.0%hi, 0.0%si, 2.7%st
加粗的地方就是IOwait,这个最初是衡量CPU的执行效率的,IOwait > 50%表示在这次执行过程中,IO占了50%以上的时间,CPU使用的时间较少。这个IOwait应该包含磁盘IO和网络传输的IO(具体的还不定)。
参照书上的解释:这个数据得根据实际情况来合理解释,IOwait高并不一定代表IO性能出现瓶颈,IOwait=0可能也很繁忙(这个具体的参照书上的demo解释)。