Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linux php-cgiがメモリソリューションの100%を占めています

Linux php-cgiがメモリソリューションの100%を占めています

  

Linuxシステムが使用中の場合、コンピュータが非常にカードになり、php-cgiプロセスがCPUを占有していることがわかり、占有率は100%に達しました。この原因は何ですか?以下の小シリーズでは、php-cgiが100%のソリューションを占めるLinuxシステムを紹介します。

Webログのディレクトリ/home /hosts_log

ログ・ファイルを持って対応するウェブサイトのID

のphp-cgiのログディレクトリは/usr /local /php_fcgi /ログ

php-fpm.log

slow.log

ログファイルを見ることで基本的に問題は解決します。もちろん問題ではない場合、ウェブサイトはハッキングされてphp ddos​​ファイルをアップロードします。あなたはそれがプログラムの問題であるかどうかをチェックすることができます時にはfile_get_contents関数を使用すると、CPUが100%になることがあります。

php.iniには、PHPスクリプトの最大実行時間を設定するパラメータmax_execution_timeがありますが、php-cgi(php-fpm)ではこのパラメータは機能しません。 PHPスクリプトの最大実行時間を制御できる実際のパラメータは、php-fpm.conf設定ファイル内の次のパラメータです。

単一のリクエストを処理するまでのタイムアウト(秒単位)。ワーカープロセスは終了します。

max_execution_timeオプションが何らかの理由でスクリプトの実行を停止しない場合に使用する必要があります。

‘オフ’

"値名=< request_terminate_timeout> 》 0s“ /value”

デフォルト値は0秒です。これはPHPスクリプトが実行され続けることを意味します。したがって、すべてのphp-cgiプロセスがfile_get_contents()関数内で動かなくなると、Nginx + PHP WebServerは新しいPHP要求を処理できなくなり、Nginxは "502 Bad Gateway"をユーザーに返します。このパラメータを変更してPHPスクリプトの最大実行時間を設定する必要がありますが、緩和策は効果的ではありません。たとえば、 "value name = request_terminate_timeout" 30s "/value"に変更すると、file_get_contents()の実行が遅くなり、150のphp-cgiプロセスが毎秒5回しか発生しなくなります。リクエスト、WebServerでは、< 502 Bad Gateway>を回避することも困難です。

完全に解決するには、file_get_contentsを直接使用する習慣を変更するしかありませんが、わずかに変更し、タイムアウトを追加し、次のようにHTTP GETリクエストを実装します。問題がある場合は、次のコードを関数にまとめることができます。

" Php

$ ctx = stream_context_create(array(

‘ http’ => array(

‘ timeout’ = "1 //タイムアウトを設定)秒数



);

file_get_contents(' http://www.111cn.net/'、 0​​、$ ctx) );;

? 》

もちろん、HTMLページがdedecmsのように生成された場合、CPUも100%になります。

Linux php-cgiプロセスはここで紹介されたCPUへの解決策の100%を占めます、抗ウイルス治療を必要とする中毒の可能性があります。

Copyright © Windowsの知識 All Rights Reserved