服务器环境:windows2003 server + apache + mysql + php + iis
服务器硬件:酷睿双核 + 2.5G内存 + 250G硬盘

最近服务器频繁宕机,观察windows任务管理器发现Apache的httpd.exe进程狂吃内存,PF从800M直飙升到2.0G然后宕机。具体表现的现象有如下几点:1.mysqld.exe占用cpu平均高达80%以上。
2.httpd.exe开机后内存占用增加速度飞快。
3.重启后不到5分钟又宕机。
4.远程连接无预兆的中断,远程桌面连接一旦中断,网站便无法访问,IP也无法ping通。
5.夜间比较稳定,一到白天就频繁宕机。apache当前参数配置如下# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_winnt_module>
  ThreadsPerChild 350
  MaxRequestsPerChild 5000
  Win32DisableAcceptEx
</IfModule>请问我该怎么办才能让服务器稳定下来? 

解决方案 »

  1.   

    看出错日志
    另外php什么版本的?还有一个可能是访问 ip太多了,你得修改一下你上面的参数 把数值都改小点.
      

  2.   

    PhpNewnew你好, 版本是 php-5.2.12-Win32  访问ip太多 在哪查看,去哪修改参数呢?你指的是php参数吗?日志里面 出现的异常基本是这些Apache错误The Apache service named  reported the following error:
    >>> [Wed Mar 21 09:43:43 2012] [notice] Disabled use of AcceptEx() WinSock2 API     .Mysql警告
    事件 ID ( 100 )的描述(在资源( MySQL )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: Changed limits: max_open_files: 2048  max_connections: 1910  table_cache: 64Perflib
    "TermService" 服务的性能库 "C:\WINDOWS\system32\perfts.dll" 的配置信息  同在注册表中保存的受信任性能库信息不匹 配。此库中的函数不会作为受信任函数处理。有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。TermServDevices
    跟后台打印程序系统服务通讯时出现错误。请打开服务管理单元,确认后台打印程序服务是否在运行。有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。Service Control Ma
    下列引导或系统启动驱动程序无法加载: 
    BC
    W3SVC
    应用程序池 'DefaultAppPool' 的 IdleTimeout '20' 大于 PeriodicRestartTime '15'。将使用默认值( IdleTimeout = '10' & PeriodicRestartTime '60' )。有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
      

  3.   

    用nod32和360都查过了 没有查出毒呢
      

  4.   

    你的那条错误是 因为加了Win32DisableAcceptEx 产生的,这个并不算是错误。
    我以前也碰过你说的问题,不过一样的没有找到最根本的解决方法,只能够去修改ThreadsPerChild 350
      MaxRequestsPerChild 5000的数量来让apache 自动在达到一定的数量时产生一个新的进程.忘记是不是这样描述了。访问的数量多不多可以在网站加个统计链接,看看是不是流量过大,如果是的话 我还是建议将
    apache php mysql 部署到linux上吧, win下的apache 真的是很无奈...
    另外一个你或者可以考虑换成nginx 不过这个早期版本我测试的时候比apache还不稳定...
    如果非要windows 那还是上iis+php+mysql 吧.
      

  5.   

    非常感谢 PhpNewnew 的耐心回复,现在即便是设置了ThreadsPerchild和MaxRequestsPerchild值分别为1000和5000,依然出现httpd.exe进程无预兆的不知何时就开始狂吃内存,导致PF上升至接近2G,最后服务器宕机。同时mysqld.exe和httpd.exe占用cpu也相当高,mysqld.exe在白天有访问的时候占用接近80%以上。现在通过51la查看访问量很少,只有近千pv和几百ip,按理说是不会出现数据库进程cpu波动如此不稳定的。用冰刃查看所有进程线程均无异样,用netstat -abn命令查看所有ip,端口等信息也没有异常,用360,金山毒霸和NOD32都查杀过,除了NOD32怀疑Serv-U有点警告以外,其他没有异常,请问我该怎么办呀?现在如何下手?换IIS或者Linux不熟练,希望能在现有情况下确认是否是黑客攻击或者其他什么配置呀程序呀的原因。
      

  6.   

    忘记看了你还开了个 iis 这个是什么情况 apache+iis+php? 那么谁在用80端口?apache? iis 干嘛的呢
      

  7.   

    ThreadsPerchild和MaxRequestsPerchild值分别为1000和5000太高啦...你原来的数值我就觉得太高了,忘记跟你说了往小的设置 分别设置到 ThreadsPerChild 100
    MaxRequestsPerChild 300看看什么情况.
      

  8.   

    有款软件是挂在服务器上的,用的是IIS,另外有个邮箱服务器也是用的IIS。 ThreadsPerchild和MaxRequestPerchild设置成100和300的时候访问网站速度奇慢 而且内存忽上忽下, 很快就hold不住 开始飞速往上飙了
      

  9.   


    我也遇到过这种情况。
    怎么都解决不了。
    当时一直以为服务器被劫持。就重做了系统。可是情况依然。
    之后就一遍一遍的检查源码
    是的。别人植入 代码,一直向外发包。之后。。
    4.远程连接无预兆的中断,远程桌面连接一旦中断,网站便无法访问,IP也无法ping通。
     (隔一会就好了)
    应该是重启了
      

  10.   

    慢慢往上调整这个数值,你那个1000啥的 没必要这么高。
    内存忽上忽下是因为释放了进程 然后又创建后的样子,hold不住是因为程序崩溃了 限制不住,哈哈 以前也是这样...悲剧。后来我果断换成Linux,天下无忧了.