Wishlist 0 ¥0.00

服务器大量php-cgi.exe进程,导致CPU占用100%的解决

出现该问题一般为程序方面问题,如程序采用fastcgi方式运行PHP,而程序设置的StartProcesses又偏大,如6甚至更大。

解决参考:

1.检查系统盘空间。查看系统临时文件是否过多,MySQL数据库的临时文件默认存到了c:/windows/temp,导致累积了几万甚至上百万的小文件,压垮系统盘。


2.PHP是一种广泛使用的动态脚本语言,不过在IIS中并没有内置对PHP语言的支持,因此如果需要使用PHP,必须自行安装。PHP可以安装为CGI模式或者ISAPI模式,由于ISAPI模式具有更高的性能,因此我建议大家使用ISAPI模式。
3.如能修改程序,建议将程序配置文件中的StartProcesses值缩到2,看是否改善。
4.看是否服务器有问题攻击现象。
windows 2003+IIS6中优化fastcgi配置文件fcgiext.ini,减少 PHP-cgi.exe进程数量和所占内存大小
本来听说fastcgi比isapi好就在服务器中装上了,配置环境为windows 2003+IIS6+fastcgi(FCGI)+PHP5.2.17,经过与很长一段时间观察,发现工作在FastCGI模式下的PHP会占用越来越多的内存,访问量稍微多点php-cgi进程就多了N个,同样情况下能比原来用isapi模式的时候多出几百M,我的服务器内存只有2G伤不起啊。
我在网上搜索了一下,发现还有不少人面临同样的问题。来自PHP官方的一个比较正式的解释是:php-cgi进程并没有内存泄漏,php-cgi会在每个请求结束的时候回收脚本使用的全部内存,但是并不会释放给 操作系统,而是继续持有以应对下一次PHP请求。这样做大概是为了减少内存碎片化或者解决从系统申请内存之后又释放回操作系统所需要的时间不可控问题。可是如果偶然一次PHP请求使用了诸如ftp或者zlib这样的大内存操作,那么将导致一大块系统内存被php-cgi持续占有,不能被利用。
解决这个问题的办法是在web服务器配置中优化fastcgi配置文件参数。
在C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件中可以设定php-cgi进程相关参数,如:
[Types] php = PHP
[PHP] ExePath=C:\php-5.3.8-nts-Win32-VC9-x86\php-cgi.exe
maxInstances=100
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
RequestTimeout=600
ActivityTimeout=900
在上面的配置中:
ExePath  指定了FastCGI解析程序的路径,
instanceMaxRequests  指定了每个实例可以处理的最大请求数,
maxInstances 指定可以启动的最大实例数目,
EnvironmentVars 创建了一个环境变量 PHP_FCGI_MAX_REQUESTS ,默认值设为10000,
requestTimeout  指定了请求的超时时间为600秒,
activityTimeout  指定了活动会话超时时间为900秒。
一下是建议值:
maxInstances=
把这个值改小
建议
512M 内存的改maxInstances=50
1G 内存的改maxInstances=80
2G 内存的改maxInstances=140
再修改
InstanceMaxRequests=
把这个值改小
建议
512M 内存的改InstanceMaxRequests=200
1G 内存的改InstanceMaxRequests=300
2G 内存的改InstanceMaxRequests=500


改完, 重启IIS。
 
instanceMaxRequests  PHP_FCGI_MAX_REQUESTS  这两个参数决定了一个php-cgi进程被创建出来之后,最多接受的PHP请求数,在lighttpd中默认配置是10000。也就是说这个php-cgi进程每接受10000次PHP请求后会终止,释放所有内存,并重新被管理进程启动。如果把它降低,比如改成100,那么php-cgi重启的周期会大大缩短,偶然的高内存操作造成的问题影响时间也会缩短。
maxInstances 这个参数指定可以启动的最大实例数目,即php-cgi.exe进程的数目。如果把它降低,比如改成100,那么在任务管理器的进程中最多只有php-cgi.exe进程,php-cgi.exe所占用的总内存将大大减少。
我现在用的服务器为windows 2003操作系统,4G内存,一个php-cgi.exe程序占用7-25M内存,我把maxInstances值调为300,减少了php-cgi.exe进程的总数量,占用内存也减小了,反应速度比以前快了不少,至少调整到多少,可根据您的站点访问量来决定。

Antimalware Service Executable 高内存的处理办法,亲测有效

反恶意软件服务的可执行过程中扮演的重要角色的Windows Defender与Windows捆绑10服务(和,尽管相似性的名字,是完全无关的Emsisoft反恶意软件!)。但是,它消耗的内存远远超过其应有的CPU处理能力,这也是臭名昭著的,甚至可以单枪匹马地降低计算机的速度,以至于无法应付。

如果您是Windows Defender用户,并且在异常长时间内注意到CPU使用率很高,您将很高兴知道此问题可以轻松解决。

在本文中,我们汇总了一些简单的步骤,您可以按照这些简单的步骤来防止Antimalware Service Executable占用系统资源并保持计算机平稳运行。

立即

什么是msmpeng.exe反恶意软件服务可执行文件?

您是否使用Windows Defender保护您的计算机?如果是这样,请打开Windows任务管理器(Ctrl + Shift + Esc或“开始”菜单>任务管理器),滚动浏览后台进程列表,您将找到一个名为Antimalware Service Executable的进程及其相应的文件msmpeng.exe。

通过此过程,Windows Defender可以连续监视计算机中是否存在潜在威胁,并提供实时保护,以防止恶意软件和网络攻击。但是,与此同时,这也可能是CPU使用率过高的原因。

可能导致系统速度降低的另一个Windows Defender功能是其“ 完全扫描”功能,该功能可以对计算机上的所有文件进行全面检查。完全扫描严重依赖于CPU,因此不怕使用系统可用的任何资源。结果,当它运行时,您可能会遇到延迟,延迟,挂起和其他系统中断的情况。

虽然防病毒程序在运行扫描时会消耗系统资源是正常的,但Windows Defender的贪婪性远胜于大多数。众所周知,长时间使用过多的CPU会在唤醒计算机时进行扫描,以快速发送电子邮件或检查网站。

尽管这可能令人沮丧,但重要的是您必须先安装另一个IT安全解决方案才能禁用Windows Defender –毕竟,这可能是计算机和坏人之间唯一的事情!让程序执行其工作,解决所有威胁,然后按照以下步骤防止问题再次发生:

修复#1:更改Windows Defender的计划选项

对于大多数人来说,当Windows Defender运行完整扫描时,通常会发生由Antimalware Service Executable引起的高内存使用率。我们可以通过安排在您不太可能感到CPU耗尽的时间进行扫描来解决此问题。

Windows任务计划程序

优化完整扫描计划。

  1. 打开“开始”菜单键入“任务计划程序”,然后单击最上面的结果以启动程序。
  2. 在左侧的导航窗格中,双击“任务计划程序库”。继续展开这些文件夹并导航到以下目标:Library / Microsoft / Windows / Windows Defender
  3. 打开Windows Defender文件夹后,双击位于中间窗格中的Windows Defender Scheduled Scan
  4. 单击“条件”选项卡取消选中所有选项 ,然后单击“确定”。这将清除您的计划扫描。
  5. 为了保护您的计算机,安排一些新的扫描很重要,但是我们可以通过这种方式来减少对系统性能的影响。为此,请双击 Windows Defender预定扫描选择“触发器”选项卡然后单击“新建”
  6. 创建适合您需求的新扫描计划,选择在保护和系统效率之间取得平衡的选项。作为指导原则,我们建议(至少)每周扫描一次,这样您不太可能会注意到CPU使用率增加。
  7. Library / Microsoft / Windows / Windows Defender文件夹中找到的其余三个服务(Windows Defender缓存维护,Windows Defender清理,Windows Defender验证)重复该过程

修复#2:将可执行的反恶意软件服务添加到Windows Defender的排除列表中

在扫描过程中,Windows Defender会检查计算机上的每个文件-包括文件本身。这有时可能会导致一些有趣的交互,并且是系统滞后的常见原因。为防止这种情况发生,您可以简单地指示Windows Defender在执行系统扫描时跳过自身。

Windows Defender排除

  1. 按Ctrl + Shift + Esc打开Windows任务管理器。
  2. 在进程列表中,搜索Antimalware Service Executable右键单击该过程,然后选择“打开文件位置”
  3. 在地址栏中,您将看到Antimalware Service Executable的完整路径。单击地址栏,然后复制完整路径
  4. 打开“开始”菜单键入“ Windows Defender”,然后单击最上面的结果以启动Windows Defender安全中心。
  5. 单击“病毒和威胁防护”,然后单击“病毒和威胁防护设置”
  6. 向下滚动至“排除”,然后点击添加或删除排除。在下一个屏幕中,单击“添加排除项”,选择“文件夹”,然后  将路径粘贴到地址栏中的Antimalware Service Executable(MsMpEng.exe)路径。最后,单击“打开”,该文件夹将立即从扫描中排除。

修复#3:禁用Windows Defender

如果在应用前两个修复程序后问题仍然存在,则您可能会尝试完全禁用Windows Defender。请记住,这样做会使您容易遭受一系列网络攻击,因此在删除Windows Defender之前,必须在计算机上安装有效的反恶意软件产品非常重要。

 

使用注册表编辑器完全禁用Windows Defender。

  1. Windows键 + R打开“运行”对话框。
  2. 在“运行”对话框中,键入regedit然后单击“确定”以打开注册表编辑器。
  3. 在左侧的导航窗格中,双击文件夹以导航到HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows Defender
  4. 如果找到名为DisableAntiSpyware的注册表项,请双击它并将其值数据设置为1

4b。如果没有看到名为DisableAntiSpyware的注册表项,请在“注册表编辑器”主窗格中右键单击,然后选择“新建”>“ DWORD(32位)值”。

4c。将此新注册表项命名为DisableAntiSpyware。双击并将其值数据设置为1。

修复#4:检查恶意软件感染

更多恶意行为可能导致Windows Defender破坏计算机的性能。使用信誉良好的轻量级反恶意软件解决方案(例如Emsisoft Anti-Malware(我们提供30天免费试用))运行完整的系统扫描,以检查计算机中是否有任何可能影响计算机平稳安全运行的恶意软件。 。

Windows Defender是一个有价值的工具,特别是因为它是操作系统附带的免费软件,但是它肯定会浪费系统的CPU。通过执行本文中介绍的步骤,您将能够控制Antimalware Service Executable,并使计算机保持全速运行。

 

修复#5:windows+R输入gpedit.msc

1 首先 win+r 输入 gpedit.msc 然后回车,查看能否到 组策略 。

回车后,应当到这个页面:

如果没有页面跳出,说明我们没办法使用命令 gepdit.msc 打开组策略,我们使用下面一个程序来解决 gepdit.msc 打不开组策略问题:

(1)新建 txt 文件,然后输入以下程序(注:没有1 2...6序号):


    @echo off
    
    
    pushd "%~dp0"
    
    
    dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt
    
    
    dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt
    
    
    for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"
    
    
    pause
    
(2)修改 txt 后缀为 .cmd 以管理员身份运行。运行过程如下:

 

(3)再使用第一步命令 gpedit.msc 打开组策略。组策略打开成功后,需要进行以下操作,进行处理问题。

2 组策略打开后,找到组策略里的 管理模板-->windows Defender 展开,找到实时保护,有的可能有多组windows Defender **  挨个文件夹查找,直至找到 【实时保护】 这个文件夹。

3 双击 实时保护 ,找到“不论何时启动实时保护,都会启动进程扫描”这一配置项设置为“已禁用”,然后检测CPU占用是否改善;

尝试上面5种方法,必药到病除!

Antimalware Service Executable CPU占用过高怎么办?

在任务栏上点击鼠标的右键,打开任务管理器

我们先来看看Antimalware Service Executable到底是个什么程序。选择该程序,鼠标右键点击,然后选择【属性】

哦,它原来是微软自带的Windows Defender的一个反恶意软件服务。从截图的电脑可以看出,它竟然吃了电脑的30%左右的CPU。怎么关闭它?

很简单!

点击【开始】菜单,选择【windows安全中心】

在【Windows安全中心】,点击【病毒和威胁防护】

在【病毒和威胁防护】界面,点击【管理设置】

在【管理设置】界面,关闭【实时保护】即可

是不是很简单?如果不差钱,我个人建议,换更好的电脑才是最简单的解决办法。你觉得呢?

FastCGI模式下PHP占用大量内存的解决办法

很长一段时间以来,我注意到工作在FastCGI模式下的PHP会占用越来越多的内存,而且似乎从不释放。起初我以为这是内存泄漏的问题,但是各个PHP社区的人好像并没有把这个当作问题。我搜索了一下,发现还有不少人面临同样的问题。来自PHP官方的一个比较正式的解释是:php-cgi进程并没有内存泄漏,php-cgi会在每个请求结束的时候回收脚本使用的全部内存,但是并不会释放给操作系统,而是继续持有以应对下一次PHP请求。这样做大概是为了减少内存碎片化或者解决从系统申请内存之后又释放回操作系统所需要的时间不可控问题。可是如果偶然一次PHP请求使用了诸如ftp或者zlib这样的大内存操作,那么将导致一大块系统内存被php-cgi持续占有,不能被利用。
解决这个问题的办法是在web服务器配置中降低PHP_FCGI_MAX_REQUESTS的值。这个参数决定了一个php-cgi进程被创建出来之后,最多接受的PHP请求数,在lighttpd中默认配置是10000。也就是说这个php-cgi进程每接受10000次PHP请求后会终止,释放所有内存,并重新被管理进程启动。如果把它降低,比如改成100,那么php-cgi重启的周期会大大缩短,偶然的高内存操作造成的问题影响时间也会缩短。
另一个办法则是写一个crontab脚本,定时发现高内存占用的php-cgi进程并向它传送kill指令。

About Us

Since 1996, our company has been focusing on domain name registration, web hosting, server hosting, website construction, e-commerce and other Internet services, and constantly practicing the concept of "providing enterprise-level solutions and providing personalized service support". As a Dell Authorized Solution Provider, we also provide hardware product solutions associated with the company's services.
 

Contact Us

Address: No. 2, Jingwu Road, Zhengzhou City, Henan Province

Phone: 0086-371-63520088 

QQ:76257322

Website: 800188.com

E-mail: This email address is being protected from spambots. You need JavaScript enabled to view it.