メシのタネ

Webプログラミング 備忘録

  • DOMをPHPで操作できたらいいよね

    そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。PHP標準でHTMLをDOMにできるらしい今、技[...]

    続きを読む
  • 設計書ってなんで書くの?

    設計書をなぜ書くのかから始めてかれこれ3年近くこの禅問答をやっているわけですが、いまだに答えは出ません。ただ、その禅問答をやる中で設計書に対する取り組み方は大きく変わったので、その一部でも書いていきたい。基本設計はとにもかくにも必要だと思う設計書はいらぬ!という話をよく聞くし、自分[...]

    続きを読む
  • 書ききってやる。

    久々に書いてみる。久々に文章を書くということをやってみようと思う。伝える作業を観察したいと思ったからそうしたいと考えた。情緒的な文章は基本的にゴミ箱にぽいしてきましたが、情緒的なのも自分だと思う。「文章をかくという作業は、とりもなおさず自分と自分をとりまく事物との距離を確認すること[...]

    続きを読む
  • 普通の会社で2年普通に働いて思う事

    えらい寒くなりました。文句言いながらも現職を続けて2017年12月1日にめでたく2年がたちました。分かりやすいが乱暴に言えばITドカタと呼ばれる業界に入って案件のヒエラルキーの無慈悲さを痛感しながらも、それでもしょうがないと頑張る人たちに心を打たれながら「じゃあ俺も」と頑張れない自分に挫折して、とあ[...]

    続きを読む
  • jQueryUiのDatepicker利用時にminDate設定するとバグる件

    題名の通りなんですが、DatepickerでminDate使うとバグります。また後でキャプチャ見て貰いますけど、灰色の部分が、minDateで設定した日付が反復して出るようになるんですね。こういうの気が付かない人がいるかも知れませんが、ChoromeでminDate設定してる人は気にしてみてくだ[...]

    続きを読む

【Apache】メモリの消費量改善

atamaitaiちょいと前の話なんですけどwebmin入れたんです。
cronとかバーチャホストとか、設定面倒臭いって思って。
なら、VPS使う必要あんの?って話になるんですけど、
やっぱパッケージとか入れやすいし、自分の好きなソフト入れて
サーバー動かせるのはやっぱ楽しいので、必要なんです・・・が
あんましfreeとか使ってなかったので気がつかなかったんですけど、
2G限界なのに大体1.8Gとか行ってて、swapもちょっと使ってて
なんじゃこれーってなったので、設定見直しました。

MPMってなに

MPMはマルチプロセッシングモジュールって言うのですが、
これにはいくつか種類があります。

一般的に使われてるモジュールが
preforkってのとworkerというやつらしいです。
この他にもwindows用のモジュールとか、apache2.4でデフォルトのモジュールとか、
よくわかんないOSのモジュールがあります。

なので多分今のトコpreforkかworker使うんだと思います。
でもこれからevent使ってく流れになるんだと思います。eventはworkerの上位互換です。

preforkモジュールは安定する代わりに、プロセスでマルチタスク制御するので重くなりがちですが、
workerモジュールは予めプロセスを立ち上げておいてマルチタスク制御するので動作が軽くなるみたいです。
ただこの辺はブログで読んだ知識なので、いつか本で補完したいと思います。

ちなみにCentOSでは、preforkが最初から設定されています。
PHP実行環境ではpreforkを使うのが望ましいみたいです。

プロセスっていうのは実行中のプログラムで
マルチタスクっていうのは沢山居る客を捌く仕組みです。
凄まじく乱暴な説明なので、時間ある人はリンク先見てください。

動作パラメータの設定(prefork)

今回のこのメモリが以上に食われる問題は
この設定のせいでした。

</p>
<p>httpd.conf内</p>
<p>&lt;IfModule prefork.c&gt;<br />
StartServers            8<br />
MinSpareServers         5<br />
MaxSpareServers        20<br />
ServerLimit           256<br />
MaxClients            256<br />
MaxRequestsPerChild  4000<br />
&lt;/IfModule&gt;</p>
<p>

色んなサイトを見ながら、このパラメータを自己解釈してみました。

StartServers

起動時に立ち上がる子サーバープロセスの数です
起動する子サーバープロセスの数は負荷により増減するので
あんまし気にしなくて良いみたいです。

MinSpareServers

これはなんもしてない子サーバープロセス数の最小値です。
この設定値よりも子サーバープロセスが少なくなった場合
親プロセスが子サーバープロセスを増やしてきます。

MaxSpareServers

なんもしてない子サーバーのプロセス数の最大値です。
これよりも子サーバープロセスの数が多くなった場合
親プロセスがこのプロセスをkillしにきます。

MaxClients

リクエストに応答する為の子プロセスを作れる上限値

ServerLimit

preforkの場合は「同時クライアント数 = サーバプロセス数」になるので
MaxClientとおんなじにしておきます。

MaxRequestsPerChild

親プロセスが子プロセスをフォークするまでのリクエスト数です。
リクエスト数が設定した値になるとフォークを始めます。

とゆうわけでこうしました。

</p>
<p>httpd.conf内</p>
<p>&lt;IfModule prefork.c&gt;<br />
StartServers            8<br />
MinSpareServers         5<br />
MaxSpareServers        10<br />
ServerLimit           100<br />
MaxClients            100<br />
MaxRequestsPerChild  1024<br />
&lt;/IfModule&gt;</p>
<p>

とりあえずこれで安定して動いてるので、
暫くこれで様子見てみようと思います。

関連記事

  1. PHPサムネイル

コメントをお待ちしております