Pro*_*ggi 10 php internet-explorer curl apache-2.2
我正在运行一个 PHP 程序,只要它不被 Microsoft Internet Explorer 浏览器调用,它就可以正常工作,之后它会生成以下进程,锁定 Apache 2 并需要重新启动 Web 服务器(在 Ubuntu 12.04 LTS 上)。
bob@drools:/etc/php5/apache2# ps auxwww | grep apache2
root 8737 0.1 2.5 369164 25800 ? Ssl 12:41 0:00 /usr/sbin/apache2 -k start
www-data 8743 0.0 3.2 393748 33268 ? Sl 12:41 0:00 /usr/sbin/apache2 -k start
www-data 8755 0.1 3.3 393856 33904 ? Sl 12:41 0:00 /usr/sbin/apache2 -k start
www-data 8779 0.1 3.2 393724 33252 ? Sl 12:45 0:00 /usr/sbin/apache2 -k start
www-data 8782 0.1 3.2 393716 33236 ? Sl 12:45 0:00 /usr/sbin/apache2 -k start
www-data 8785 0.1 3.2 393684 33204 ? Sl 12:45 0:00 /usr/sbin/apache2 -k start
www-data 8812 1.1 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8815 1.3 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8818 1.3 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8821 1.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8824 1.4 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8827 1.4 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8830 1.4 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8835 2.5 3.2 393684 33256 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8838 2.8 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8841 2.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8844 2.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8847 3.2 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8850 3.0 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8853 3.2 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8856 3.2 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8861 3.3 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8864 3.6 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8867 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8870 3.6 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8873 3.6 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8876 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8879 3.3 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8881 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8883 3.6 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8886 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8891 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8894 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8896 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8900 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8901 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8904 3.5 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8909 3.8 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8912 3.8 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8915 3.8 3.2 393684 33264 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
www-data 8918 3.6 3.2 393684 33260 ? Sl 12:47 0:00 /usr/sbin/apache2 -k start
root 8922 0.0 0.1 9396 2000 pts/0 S+ 12:47 0:00 grep --color=auto apache2
Run Code Online (Sandbox Code Playgroud)
它曾经锁定整个服务器,直到我在/etc/spache2/apache2.conf 中将一些“ mpm_ ”模块参数更改为更合理的参数。
鉴于 Internet Explorer 的问题,我什至添加了这一行:
**" SetEnvIf User-Agent ".*MSIE.*" nokeepalive "**
Run Code Online (Sandbox Code Playgroud)
在位于此处的虚拟主机文件中:/etc/apache2/sites-available。
有很多关于这个问题的文章,但我没有成功实现其中的任何一篇:
Apache Server 2 在收到来自 IE 10/11 的请求后挂起:
更多研发: Internet Explorer 10 (Windows 8) 导致 Apache 崩溃
PHP 程序使用cURL获取 25 个项目的列表,并对每个项目执行 (GET) API 调用到外部服务器,该外部服务器返回 JSON 数据以供进一步处理。这是一个经典的长时间运行的数据程序。
让我感到惊讶的是,它在除 Internet Explorer 之外的所有其他浏览器中都能正常运行——这会导致 Web 服务器行为异常。
我询问了列出的 R&D,然后一些,实施了建议的修复程序,但我仍然得到相同的可预测、可重新创建、有问题的服务器行为。
我需要弄清楚如何保护服务器在遇到和 Internet Explorer 浏览器发出这些特定请求时的不良行为。我想首先了解为什么会发生这种情况。
任何指导、观点、方向或解决方案将不胜感激......
这是我的 cURL 代码的快照:
<?php
// *** CURL Init, SetOps, and Execution Statements ****
$ch = curl_init();
// *** Execute the API call for each part number and store in the Associative Array ****
$index=0;
foreach ($partNumbersArray as $partNum) {
$MyValue = $partNum;
$MyUrl = $MyNiinjaBaseURL."/".$APICmd1."/".$MyDataSet."/".$MyValue."?key=".$MyKey."&$"."filter=substringof('".$MyValue."',PartNumbers)";
// *** cURL SetOpts, and Execution Statements ****
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
// curl_setopt($ch, CURLOPT_TIMEOUT, 15); // <= THIS *never* worked with any reliability ....
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch); // <= THIS executes the cURL call and stores the resulting JSON object in the variable '$server_output'
$niinjaResultsJsonArray[$MyValue] = $server_output; // Add the JSON object to the Array and index to PartNumber
$index++; // Increment the index
} // End Execution of NIINJA API Calls
// ** Close the CURL Object and release resources
curl_close ($ch);
?>
Run Code Online (Sandbox Code Playgroud)
这是 PHP 信息页面:http : //www.versaggi.net/phptest.phtml
很久以前,我看到 Apache 锁定是由 Apache 进程通过 HTTP 调用同一服务器上的 Apache 进程服务的另一个 URL 导致的。我有时会遇到一堆等待此类调用的进程,而没有可用的 Apache 进程来为它们提供服务。在我的例子中,我在一些网页前面有一个翻译层,但是在你自己的网站上调用 API 是一样的。
进行原始调用的浏览器的特性可能会使这种情况更容易发生。例如,保持活动、超时行为等,但从根本上说,这不是浏览器的问题。
如果它与我所看到的类似,那么您希望查看使用 curl 时的超时行为。您所包含的代码表明您对此有所了解,但您可能需要更细粒度地理解它到达请求中的确切位置。使用tcpdump(或 ngrep、Wireshark或其他)查看它可能会很有趣。此外,当调用进程挂起时,最好知道正在进行什么系统调用。也就是说,用strace -p [PID].
您可能还应该考虑是否可以从 API 的使用中删除 HTTP 调用。您能否通过直接调用处理 API 请求的适当代码来将事情保留在同一个 Apache 进程中?
告诉人们您如何运行 PHP(例如 mod_php、fpm 等)可能是相关的。这可能是理解代码锁定机制的一部分。
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |