查看: 1803|回复: 2

php问题:无法将 FastCGI 进程放入 JobObject 中

[复制链接]

618

主题

425

回帖

79

日志

管理员

积分
5471
QQ
发表于 2024-4-17 02:27:03 | 显示全部楼层 |阅读模式
问题:服务器php7.0以下IIS相关网站的php文件可以正常使用,但切换为php7.0及以上,php网页文件不能正常打开,提示500错误:无法将 FastCGI 进程放入 JobObject 中。请尝试禁用“应用程序池 CPU 限制”功能。

  1. 无法将 FastCGI 进程放入 JobObject 中。请尝试禁用“应用程序池 CPU 限制”功能。
复制代码

解决办法:改应用程序池---高级设置---进程模式---标识为“localsystem”。问题解决了!



知识点:
  • 应用程序池标识,它是运行应用程序池工作进程的服务或用户帐户的名称。 由 identityType 属性定义。 默认情况下,从 IIS 7.5 开始,应用程序池在内置的 ApplicationPoolIdentity 帐户下运行,该帐户是由 Windows Process Activation Service (WAS) 动态创建的。 (在 IIS 7.0 中,默认标识为 NetworkService 帐户。)可以将 identityType 属性值更改为内置 NetworkService 帐户、LocalService 帐户、内置 LocalSystem 帐户或创建的自定义帐户。 如果选择自定义帐户,请使用 userName 和 password 属性定义帐户凭据。 但请注意,NetworkService、LocalService 和 LocalSystem 帐户的用户权限比 ApplicationPoolIdentity 帐户多。 (警告:使用高级用户权限运行应用程序池存在严重安全风险。)此外,可以使用 logonType 属性指定进程标识应以批处理用户还是服务身份进行登录。 (有关登录类型的其他信息,请参阅 [color=var(--theme-hyperlink)]LogonUser 函数一文。)



以下重启IIS或者重新安装php的办法不行
  1. php-cgi.exe-FastCGI进程意外退出
复制代码

服务器版本:window server2012
近期一个新的项目需要配置到服务器上,从阿里云的域名解析,到配置及安装,一系列的操作,完事儿后,访问,好了,开始遇到:
第一个问题:
服务器错误,为500;只是知道500是内部服务器错误,不知道什么原因;访问php文件无法访问,访问html文件可以正常访问(此时还不知道问题点出现在哪里)
第二步:查了一下,修改一下报错详细信息,刷新之后显示如下图:(这个具体修改那些,建议自己查询一下,当时候查了资料,好像就一个能用,忘了是那篇文章了)
20201016101840855.png.jpg
按照提示,我们进入本地php文件中,找到对应的版本7.1下的php-cgi.exe文件
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZlcnJ5X2JvZHk=,size_16,color_FFFFFF,t_70.jpg
然后双击运行一下两个文件,均报错,提示如下图:
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZlcnJ5X2JvZHk=,size_16,color_FFFFFF,t_70.jpg
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZlcnJ5X2JvZHk=,size_16,color_FFFFFF,t_70.jpg
到这里就有点懵逼了,CGI/FastCGI?是啥啊?最后翻了好多文章,最终明白了,CGI/FastCGI是php在window下运行方式,或者可以理解为运行php通道,具体不多说。
第三步:此时,我们大致就有了方向,知道FastCGI未工作导致(好吧,此时才明白报错提示的含义到底是什么);接下来继续找文章,怎么才能运行CGI/FastCGI呢?是什么原因导致CGI/FastCGI停止工作或退出的呢?
带着两个问题,找了很多篇文章,不知道是谁抄袭谁,大多都说因为三方拓展或者插件导致,需要更改php.ini配置文件,都是都没有说具体是那些扩展,怎么看那些是三方拓展,打开php.ini文件,我又愣住了,改哪里啊?那些是三方的?没有对比,没有参照了,还有人说一个来,那也得有参照啊...........尝试了一下,果断放弃了继续看下去的念头,不是一点用都没有,起码能得出一个结论,是php.ini文件配置导致
好吧,不发牢骚了,进入正题:
前思后想,因为是通过宝塔工具下载的php包,包括php各个版本,可能是前人改了一些配置什么的不晓得,因此而附带的一些插件之类的,既然不知道那些问题,突然就想到,卸载重装,是否可行?
第四步:想到了,那就干,尝试一下总没错,然后把之前的php版本删掉,重新下载安装一下;ok,进入版本中,尝试运行一下php-cgi.exe文件,出现如下图:
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZlcnJ5X2JvZHk=,size_16,color_FFFFFF,t_70.jpg
好像没有之前的错误提示了,嗯....应该是成功了,再运行一下php.exe,没错误提示;好了,重新访问一下项目,哦吼,你没看错:成......功......了,哈哈。绕了好大一个弯,重装一下php居然就搞定了,想笑有想哭的感觉,当然问题解决,前者大于后者。
上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道!
回复 关闭延时

使用道具 举报

618

主题

425

回帖

79

日志

管理员

积分
5471
QQ
发表于 2024-4-17 02:48:49 | 显示全部楼层

问题:服务器php7.0以下IIS相关网站的php文件可以正常使用,但切换为php7.0及以上,php网页文件不能正常打开。

解决办法:改应用程序池---高级设置---进程模式---标识为“localsystem”。可以了

1.jpg 2.jpg

上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道!
回复 支持 反对

使用道具 举报

618

主题

425

回帖

79

日志

管理员

积分
5471
QQ
发表于 2024-4-17 03:02:30 | 显示全部楼层
配置
可以在 ApplicationHost.config 文件中的服务器级别配置 <processModel> 元素。
特性
[size=0.875em]展开表
[td]
属性
说明
identityType可选枚举属性。

指定运行应用程序池的帐户标识。

注意:从 IIS 7.5 开始,默认值为 ApplicationPoolIdentity。 (在 IIS 7.0 中,默认值为 NetworkService。)

identityType 属性可以是下列可能值之一;默认值为 NetworkService。

[size=0.875em]展开表
说明
ApplicationPoolIdentity
指定应用程序池在动态创建的应用程序池标识帐户下运行。 从 IIS 7.5 开始,ApplicationPoolIdentity 是运行应用程序池的默认标识。 (在 IIS 7.0 中,默认标识为 NetworkService。)

当应用程序池在 ApplicationPoolIdentity 帐户下运行时,应用程序池将以“IIS AppPool<AppPool>”标识访问资源。 例如,对于“DefaultAppPool”,标识为“IIS AppPool\DefaultAppPool”。 此标识允许管理员指定仅与运行应用程序池的标识相关的权限,从而提高服务器的安全性。

数值为 4。
LocalService
指定应用程序池在内置 LocalService 帐户下运行,该帐户的用户权限与 NetworkService 相同。

当应用程序池在 LocalService 帐户下运行时,应用程序池会在网络上显示匿名凭据。

注意:在具有高级用户权限的帐户下运行应用程序池存在严重安全风险。

数值为 1。
LocalSystem
指定应用程序池在内置 LocalSystem 帐户下运行,该帐户在本地计算机上具有广泛的特权,并充当网络上的计算机。

注意:在具有高级用户权限的帐户下运行应用程序池存在严重安全风险。

数值为 0。
NetworkService
指定应用程序池在内置 NetworkService 帐户下运行。 在 IIS 7.0 中,这是运行应用程序池时的默认标识;IIS 7.5 中的默认值已更改为 ApplicationPoolIdentity。

当应用程序池在 NetworkService 帐户下运行时,应用程序池将以计算机帐户访问网络资源。

数值为 2。
SpecificUser
指定应用程序池在自定义标识下运行,该标识使用 userName 和 password 属性进行配置。

注意:为避免在配置文件中存储未加密的密码字符串,请始终使用 AppCmd.exe 或 IIS 管理器输入密码。 如果使用这些管理工具,密码字符串将在写入 XML 配置文件之前自动进行加密。 与存储未加密的密码相比,这种方式提供的密码安全性更高。

注意:托管服务帐户可用于让服务和任务共享自己的域帐户,并启用自动密码管理,无需管理员手动管理密码。 有关详细信息,请参阅[color=var(--theme-hyperlink)]托管服务帐户的新增功能

数值为 3。

idleTimeout可选的 timeSpan 属性。

指定在未收到新请求且工作进程未处理请求时,工作进程应空闲运行的时间(以分钟为单位)。 在分配的时间过后,工作进程应请求 WWW 服务将其关闭。

默认值为 00:20:00。

若要禁用空闲超时功能,请将此值设置为 00:00:00。
idleTimeoutAction可选枚举属性。

指定达到空闲超时持续时间时要执行的操作。 在 IIS 8.5 之前,在 idleTimeout 属性持续时间内处于空闲状态的工作进程将被终止。 在 IIS 8.5 之后,可以选择终止达到 idleTimeout 限制的工作进程,或将其从内存移到磁盘从而将其暂停。 与终止进程相比,暂停进程所需的时间和消耗的内存可能更少。

可以使用应用程序初始化的虚假请求配置暂停的空闲超时操作(请参阅 [color=var(--theme-hyperlink)]applicationInitialization)。

idleTimeoutAction 属性可能具有以下值。 默认值为 Terminate。[size=0.875em]展开表
说明
Terminate
终止空闲工作进程。 这将导致在用户随后访问站点并启动工作进程时需要更长的启动时间。

数值为 0。
Suspend
暂停空闲工作进程。 这样做会让工作进程保持活动状态,但已从内存移动到磁盘,从而减少了系统资源消耗。 当请求随后传入时,内存管理器会将请求所需的页面文件从磁盘加载到内存中,很可能会使工作进程比之前终止的进程更快可用。

数值为 1。

loadUserProfile可选布尔属性。

指定 IIS 是否加载应用程序池标识的用户配置文件。 将此值设置为 false 会导致 IIS 还原为 IIS 6.0 行为。 IIS 6.0 不会加载应用程序池标识的用户配置文件。

默认值为 false。
logEventOnProcessModel可选标志属性。

指定进程中采取的哪些操作会被记录到事件查看器中。 在 IIS 8.0 中,应用的唯一操作是空闲超时操作,在该操作中,进程因在 idleTimeout 期间处于空闲状态而终止。

标志名称等于 IdleTimeout。 值为 1。

默认值为 IdleTimeout。
logonType可选枚举属性。

指定进程标识的登录类型。 (有关登录类型的其他信息,请参阅 [color=var(--theme-hyperlink)]LogonUser 函数一文。)

注意:此属性是在 IIS 7.5 中引入的。

logonType 属性可以是下列可能值之一;默认值为 LogonBatch。
[size=0.875em]展开表
说明
LogonBatch
指定应用程序池标识应以批处理用户身份登录。

数值为 0。
LogonService
指定应用程序池标识应以服务身份登录。

数值为 1。

manualGroupMembership可选布尔属性。

指定是否将 IIS_IUSRS 组安全标识符 (SID) 添加到工作进程令牌。 如果为 false,IIS 会自动使用应用程序池标识,就像它是内置 IIS_IUSRS 组的成员一样,该组有权访问必要的文件和系统资源。 如果为 true,必须将应用程序池标识显式添加到工作进程在运行时所需的所有资源中。

默认值为 false。
maxProcesses可选 uint 属性。

指示应用程序池使用的工作进程的最大数目。
  • 值为“1”表示应用程序池最多只有一个工作进程。 这将是在没有 NUMA 节点的服务器上的设置。
  • 值为“2”或更大表示 Web 园可在应用程序池中使用多个工作进程(如有必要)。
  • 值为“0”指定 IIS 运行的工作进程数与非一致性内存访问 (NUMA) 节点的数量相同。 IIS 标识硬件上可用的 NUMA 节点数,并启动相同数量的工作进程。 例如,如果有四个 NUMA 节点,那么该应用程序池最多只能使用四个工作进程。 在此示例中,将 maxProcesses 设置为值“0”或“4”会产生相同的结果。
默认值为 1。
password可选的字符串属性。

指定与 userName 属性关联的密码。 仅当 identityType 的值为 SpecificUser 时,才需要此属性。

注意:为避免在配置文件中存储未加密的密码字符串,请始终使用 AppCmd.exe 或 IIS 管理器输入密码。 如果使用这些管理工具,密码字符串将在写入 XML 配置文件之前自动进行加密。 与存储未加密的密码相比,这种方式提供的密码安全性更高。
pingingEnabled可选布尔属性。

指定是否为工作进程启用 ping。

默认值为 true。
pingInterval可选的 timeSpan 属性。

指定 WWW 服务向工作进程发送运行状况监视 ping 的间隔时间。

默认值为 00:00:30(30 秒)。
pingResponseTime可选的 timeSpan 属性。

指定工作进程响应运行状况监视 ping 的时间。 超过时间限制后,WWW 服务将终止工作进程。

默认值为 00:01:30(1 分 30 秒)。
requestQueueDelegatorIdentity可选的 String 属性。

指定有权将 HTTP 请求委托给应用程序池的帐户标识。

注意:此属性在 Internet Information Services (IIS) 管理器 UI 中不可用。
setProfileEnvironment可选布尔属性。

当 setProfileEnvironment 设置为 True 时,WAS 将创建一个环境块,以便在创建工作进程时传递给 CreateProcessAsUser。 这可确保根据新进程的用户配置文件设置环境。

默认值为 True。
shutdownTimeLimit可选的 timeSpan 属性。

指定 W3SVC 服务在启动回收后等待的时间。 如果工作进程未在 shutdownTimeLimit 内关闭,则 W3SVC 服务将终止该进程。

默认值为 00:01:30(1 分 30 秒)。
startupTimeLimit可选的 timeSpan 属性。

指定 IIS 等待应用程序池启动的时间。 如果应用程序池未在 startupTimeLimit 内启动,则会终止工作进程,并递增快速失败保护计数。

默认值为 00:01:30(1 分 30 秒)。
userName可选的字符串属性。

指定在 identityType 为 SpecificUser 时应用程序池的运行标识。

来源:https://learn.microsoft.com/zh-c ... ls/add/processmodel

上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

快速回复 返回顶部 返回列表