为什么你需要重视内存泄露?

Chris Brumme的一篇最新论文有提到这么一句话:“服务器上不应该出现页换出”。
为什么?我来试着翻译翻译。

因为在一台服务器环境中,页换出(Paging)等同于系统崩溃。我之前从其他部门的一位老哥那里听说过这么一个故事:他们有一台服务每隔10小时就会崩溃,就像个闹钟一样准时,这个时候,只能重启系统了。

团队为了解决这个问题,将服务器迁移到一个集群中。实际发生的事情时,这个集群中的所有服务器都会按一定的时间间隔和顺序进行定期重启。客户并不会对此有任何感知,但是服务器管理员就头疼了。(嘿,伙计,看起来,2号服务器需要重启了哦。它的运作开始有点不正常了。)

那么,这台服务器出现周期性崩溃的原因是?页面换出(Paging)。
在服务器上跑着的一个后台服务,在处理每一个客户端请求的时候,会出现一个4字节的内存泄露。
最终,可用内存被泄露的内存填满,操作系统不得不进行页换出。
而频繁的页换出会降低系统的响应速度,但是客户端这头的请求量并没有减少。所以随着时间的流逝,请求积压的越来越多,最终导致系统不堪重负,而崩溃了事。

经过长时间的调试,开发团队终于找到内存泄露的地方并修复了问题。
问题修复了,内存不再泄漏了,服务器也Happy了。

总结

因为这个服务器集群主要是为了解决系统定期崩溃的问题,我倒是怀疑他们会减少集群的规模,这样就能省上一大笔钱了。我这只是猜测啊。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《On a server, paging = death》

打开网易新闻 查看更多图片