Can't create a new threadが連発する件

とあるサイトにて、アクセス数が増加してくると

Can’t create a new thread (errno 12); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug

というエラーが連発し、ページが表示されなくなる現象に悩まされ中。コンソールでプロセスをみてみると、httpdが山のように・・・溢れています。。CPUの使用率も凄いことになってるし、Load Averageも高い。

そのページは外部サーバのページから引っ張ってきたデータと、自サーバのDBから引っ張ってきたデータをphpで集計して表示しているんだけど、どうもその処理待ちでプロセスがたまって上記エラーがでているっぽい。時間が経てば処理待ちが解消されるのか普通にページが表示されるようになるんだけど。ボトルネックは外部サーバとの通信負荷か?

ページを表示するたびに外部サーバから毎回データを引っ張ってくるので、本当は「PEAR::Cache_Lite」なんかを使うべきなんだろうけど、リアルタイム性が重要な情報を表示しているためキャッシュの利用は不可。

外部サーバとの通信負荷以外にも、とってきたデータに正規表現かけて多次元配列でごにょごにょしたりphpでいろいろやっているので、とりあえずそちらの負荷対策をやりましょうと。てことで、やった対策としては、

  1. Zend Optimizer 3の導入
  2. eAcceleratorの導入
  3. httpd.confでKeepAliveまわりの調整

でphpの処理の高速化・負荷低減をはかりつつ、httpd.confの設定でhttpdプロセスが増えるのを押さえつつ、みたいなのを期待しましたが、あまり効果でずorz

うーん、サーバスペックの増強が最後の手段だけど、、そもそもの仕組みに問題あるっぽいからなぁ。どうしたものか。

参考

MW WP Form

MW WP Form はショートコードベースのフォームプラグインです。多くの機能を持っており、例えば、多くのバリデーションルール、問い合わせデータの保存、そしてグラフ機能集計などを使用することができます。

さらに詳しく
Habakiri

Habakiri

Bootstrap ベースのシンプルな WordPress テーマ。レスポンシブ、多くのカスタマイズ機能。圧縮された CSS・JS を使用する高速化対策。Microformats 対応。Sass、クラスベースの functions.php。

さらに詳しく
basis-stylus

Basis

軽量なレスポンシブ Stylus/CSS フレームワーク。Flexbox ベースのグリッドシステム、疎結合なコンポーネント、バーティカルリズム。

さらに詳しく