在换用16核CPU、16G内存的服务器后,发现7200转硬盘不给力,就增加了多块10000转的迅猛龙硬盘,一台服务器上的4块硬盘分别放置系统及备份文件、Squid缓存文件、MySQL文件、Apache和HTML缓存文件,这样一般访问都不会有什么压力。
但在我们持续导入数据、批量修改模板的过程中,发现放置Squid缓存文件的硬盘有时占用达到100%,影响正常访问,于是我们修改Squid设置文件,只使用几个G内存作为Web反向加速的缓存,关闭了几十G、上百G的Squid磁盘缓存,这样可以避免大量小文件的寻道操作。
接下来又发现系统盘也偶尔发生占用100%的情况,这时更是影响服务器上所有网站的访问,先以为是交换内存(Swap)的问题,用swapoff -a关闭了所有磁盘交换文件。
但这样的情况下竟然还是有问题,再检查,发现是MySQL的临时文件引起的,MySQL的查询、排序等操作中需要用到大量的临时文件,默认使用Linux的系统临时文件夹/tmp来保存,这就是瓶颈所在了。找了一些资料,可以修改my.ini中的tmpdir设置,让临时文件放置在多块硬盘上,还可以设置到内存文件系统(tmpfs)中,检查我们机器中启动时默认就有/dev/shm/这个最大可以用物理内存一半容量的内存文件夹,于是就设置tmpdir=/dev/shm/来充分利用内存,跳过硬盘,读写速度应该高出几个数量级。
Squid缓存文件、Swap交换文件、MySQL临时文件都停掉或者转到内存后,现在的16G内存也不算很富裕了,上周就和同事商量添加内存的事情,原计划把服务器内存加满到64G,但这种DDR2 主频 663 带有ECC REG校验的服务器专用内存目前价格还比较高,3台服务器加满需要近2万元,都可以新购两台服务器了,考虑先还是将其中2台增加到32G,1台保持16G,看看改善的效果,以后再逐步增加。
已经在淘宝上购买了8根4G专用内存,下周初同事安装到服务器上去,然后再修改一些设置,争取让服务器硬件不成为我们不断增加数据的障碍。今年准备在去年上千万页面的基础上,还要增加到上亿的数量级。
评论2
为什么不用SSD?
SSD小文件寻址用时几乎为零
专门用作缓存文件储存不好么?
----------------------------------
而且四块硬盘也可以做RAD(不怕丢失数据就做0,怕的话5或者10?)
单独分开成四个分别放效率太低了!
现在16$/month 的VPS都是RAD10+万转硬盘
SSD及RAD硬盘问题
谢谢这位朋友的留言建议,说的很好、很专业!
先前我们考虑过SSD,但因为容量小、价格高、寿命短等原因,暂时还没有实施,而是添置了2块300G的万转硬盘。我们现在机器中的4块硬盘是2块7200转的1T硬盘和2块10000转的300G硬盘,做起RAD起来怕是不合适,另外就是暂时不想停机重装系统、导数据,所以就这样先凑合着用,以后合适的时候再改为你建议的RAD并添加SSD。