0

私は非常に奇妙な問題を抱えています。サーバーには、約3k行のコード(100 kB)を含むtest.phpファイルがあります。コードは何もしません。これは、多くのパラメーターと関数を持つかなり大きなクラスの定義ですが、そのクラスがインスタンス化されたり、使用されたりすることはありません。

私は、1000回アクセスされるまで、100リクエスト/秒の速度でtest.phpにアクセスしています。その後、サーバーが落ち着いていることを確認し、テストを再実行します。通常、最初の数回の実行で問題ありません。次に、次の実行でいくつかのタイムアウト要求があります。次の実行では、はるかに多くのタイムアウト要求があります。そして、もう一度実行するとtop、CPUの100%を必要とする何かを実行しているいくつかのphp5-fpmを示している間、ほとんどすべての要求が失敗します。通常、サーバーが落ち着くまでに数分かかります。この状態でHTTPリクエストを実行しようとすると、504エラーが発生します。

静的ファイル(例:test.html)またはphp open-closeタグのみを持つ空のtest2.phpを使用した同じテストでは、興味深い結果は得られず、すべてがスムーズに実行されます。

サーバーはNginxAWSEC2インスタンスです。私はこれまで運がなかった構成で遊んでみました。以下は、関連する可能性のあるパラメータの一部です。

root@ip-...:~# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 23
model name  : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz
stepping    : 10
cpu MHz     : 2659.994
cache size  : 6144 KB
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu tsc msr pae cx8 cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht pbe nx lm constant_tsc up arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
bogomips    : 5319.98
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:

root@ip-...:~# nproc
1

www.conf

pm.max_requests = 500
pm.max_children = 5
pm = dynamic

nginx.conf

worker_processes 4;
events {
    worker_connections 768;
}
http {
    gzip on;
    client_body_timeout 300;
    client_header_timeout 300;
    send_timeout 300;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
}

私はこれを1nginxワーカー+1php子に減らし、他のいくつかのことで遊んでみましたが、これらのことのどれも違いを生んでいないようです。私が言えることから、メモリは決して交換されません。他に何をデバッグまたはチェックできるかについてのアイデアは大歓迎です!

4

1 に答える 1

0

を使用しapcます。これにより、解析されたPHPファイルがオペコードとしてキャッシュされ、何度も解析がスキップされます。

于 2012-11-21T10:52:44.360 に答える