PHPプログラムを実行していますが、Microsoft Internet Explorerブラウザによって呼び出されない限り正常に動作します。その後、以下のプロセスが生成され、Apache 2がロックされ、再起動が必要になります。ウェブサーバー(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
「mpm _」モジュールパラメータの一部をでより合理的なものに変更するまで、サーバー全体をロックしていました。 )/etc/spache2/Apache2.conf。
Internet Explorerの問題を考慮して、次の行を追加しました。
**" SetEnvIf User-Agent ".*MSIE.*" nokeepalive "**
ここにある仮想ホストファイル内:/ etc/Apache2/sites-available。
この問題について書かれた記事はたくさんありますが、それらのいずれかを実装することに成功していません。
Apache Server 2は、IE 10/11 からリクエストを受信した後にハングします:
その他の研究開発:Internet Explorer 10(Windows 8)がApacheをクラッシュさせる
PHPプログラムは cURL を使用して25項目のリストを取得し、さらに処理するためにJSONデータを返す外部サーバーに対してそれぞれに対して(GET)API呼び出しを実行します。これは、古典的な長時間実行データプログラムです。
私のヌードルを焼くのは、Internet Explorerを除く他のすべてのブラウザで正常に動作することです。これにより、ウェブサーバーが誤動作します。
リストされているR&Dに問い合わせてから、提案された修正を実装したものもありますが、それでも同じ予測可能、再現可能、問題のあるサーバーの動作が得られます。
サーバーが検出され、InternetExplorerブラウザがこれらの特定のリクエストを行ったときにサーバーが不正に動作するのを防ぐ方法を理解する必要があります。そもそもなぜそれが起こるのか理解したい。
ガイダンス、視点、方向性、または解決策をいただければ幸いです...
これが私の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);
?>
これがPHP情報ページです: http://www.versaggi.net/phptest.phtml
ずっと前に、Apacheプロセスが同じサーバー上のApacheプロセスによってサービスされている別のURLにHTTP経由で呼び出しを行った結果としてApacheがロックアップするのを見ました。私は時々、それらを処理するために利用可能なApacheプロセスがない状態で、そのような呼び出しを待機している一連のプロセスに行き着きました。私の場合、いくつかのWebページの前に翻訳レイヤーがありましたが、自分のサイトでAPIを呼び出すことはほとんど同じです。
元の呼び出しを行うブラウザの特性により、これが発生する可能性が高くなります。たとえば、キープアライブ、タイムアウト動作などですが、基本的にブラウザに問題があるわけではありません。
私が見たようなものであれば、curlを使用する際のタイムアウト動作を確認する必要があります。あなたが含めたコードはあなたがそれに取り組んでいることを示唆していますが、それが到達しているリクエストの正確なポイントを正確に理解するためにもっときめ細かくする必要があるかもしれません。 tcpdump (またはngrep、 Wireshark など)でそれを見るのは興味深いかもしれません。また、呼び出しプロセスがハングしたときに、どのシステムコールが進行中であるかを知っておくとよいでしょう。つまり、strace -p [PID]
で見てください。
APIの使用からHTTP呼び出しを削除できるかどうかについても検討する必要があります。 APIリクエストを処理する適切なコードを直接呼び出すことで、同じApacheプロセス内に物事を維持できますか?
PHP(mod_php、fpmなど)を実行している方法を人々に伝えることはおそらく適切です。これは、コードがロックされるメカニズムを理解することの一部かもしれません。