【问题标题】:Codeigniter and Apache configuration issuesCodeigniter 和 Apache 配置问题
【发布时间】:2016-09-17 15:35:24
【问题描述】:

我有一个 Codeigniter 项目,其中包括一个“时间昂贵”的同步。基本上我通过 OCI8 连接到远程服务器(可能运行 CentOS,但我只知道这些)到 Oracle 数据库,选择大约 20,000 行,然后更新本地 MySQL 数据库。

同步持续大约 20ihs 分钟(是的,MySQL 可以更优化,什么都没有),但这不是我目前遇到的问题......

我有配备双 Xeon 和 16 Gig ram、CentOS x64、Apache 2.2.15、PHP 5.6.21 和 MySQL 版本 5.6.30 的专用服务器。

现在,使用 Apache 2 处理程序和默认的 PREFORK MPM,同步可以按预期工作。

如果我离开 Apache 2 处理程序(我认为是 mod_php)并将 MPM 更改为 WORKER 或 EVENT,则同步开始并且 PHP 会吐出白屏死机,而日志文件中没有任何内容。

如果我切换到 fcgi 和 EVENT 或 WORKER MPM,同步开始,大约 2 分钟后它给我“网关没有收到来自上游服务器或应用程序的及时响应。”

请注意,从我切换回 Apache 2.0 处理程序和 PREFORK 的那一刻起,服务器之间没有连接问题,它按预期工作。

Codeigniter 版本是 2.1.0(是的,我知道它升级很久了,它只是继承的项目,我不完全知道 CORE 文件是否发生了一些变化,而且这个家伙“工作得很好,不是吗”。

任何类似问题的线索或链接都非常感谢。

提前致谢

【问题讨论】:

  • 我真的很好奇您为什么要从 Prefork(正在工作)切换到另一个?我的意思是它没有解释为什么这个行得通而另一个没有......
  • 因为我正在运行 SSL 站点,并且从我在这里读到的已接受答案来看,这应该是相当不错的事情 serverfault.com/questions/383526/… 另外因为 Prefork MPM 使用多个子进程,每个子进程都有一个线程,并且每个进程一次处理一个连接。 Worker MPM 使用多个子进程,每个子进程有很多线程。每个线程一次处理一个连接。它应该在 RAM 上更容易,因为它会根据请求生成新进程......所有这些都基于我在网上阅读的内容

标签: php mysql apache codeigniter server-configuration


【解决方案1】:

@Kosta,您似乎遇到了某种服务器长请求超时错误。如果不检查日志,我无法确切地说出什么。我也建议你检查PHP配置超时,max_execution_time,max_input_time也可能会影响到此类问题。

【讨论】:

  • 感谢您的提醒,感谢您的尊严回复,而不是仅仅投反对票,因为我确实试图用谷歌搜索可能是什么问题。 max_execution 设置在 2000 并在 1600 上输入,超过 2 分钟后我收到错误,但正如 mod_php 和 prefork 以外的其他内容所说... mod_php 和其他 MPM 给我白屏,在错误日志中没有什么明显的。 ..
  • 看起来你应该在列表中使 PHP 等于 max_execution 和 max_input_time 到 2000。我认为然后你切换到 mod_php 和其他 MPM 你得到 web 服务器超时。您还应该检查 Web 服务器超时是否可以增加到与 mod_php 和 prefork 相同的值。
  • 我可能不够清楚... 1. mod_php + prefork = 按预期工作 2. mod_php + worker/event = 白屏死机 3. fcgi + 任何 mpm = 504 超时...无论如何,再次感谢我会尝试摆弄超时然后干杯
【解决方案2】:

执行httpd -M 并查看您在 Apache 的活动模块列表中是否有 fcgid_module

如果没有,请执行yum install mod_fcgid 并安装它

那么你可能需要为你的超时问题做一些设置,假设你已经在/etc/httpd/conf/httpd.conf 中设置了使用 CGI/FastCGI 而不是 Apache 2 处理程序的所有其他东西

<IfModule mod_fcgid.c>
        FcgidIdleTimeout 1800
        FcgidProcessLifeTime 1800
        FcgidBusyTimeout 1800
        FcgidIOTimeout 1800
        FcgidConnectTimeout 20
</IfModule>

重新启动 service httpd restartservice php-fpm 重新启动(或您正在使用的任何 PHP 处理程序)并重试

【讨论】:

  • 谢谢!这就是问题所在,我一安装 fcgid_module,它就起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2020-06-27
相关资源
最近更新 更多