Choco Soft

Nadesiko DE RDB

Choco Soft header image 1

PHPを最大に生かすApacheのチューニングとは?2

2018年04月14日 · Apache, PHP, Server

前回はApacheはココを編集しようというものでした。
しかし、編集するにしても現状を正確に把握する必要があります。
負荷試験アプリケーションをインストールしたり、専用のサーバーを用意する事も出来ますがもっと簡単に調査できる方法を考えました。

1.vmstat
このコマンドで表示されるのは、現在のプロセス,メモリー,スワップ,デバイス,割り込み,CPUの情報です。(オプション無しの場合)
「-d」オプション
⇒パーティションへの読み書き状況を表示
「-p」オプション
⇒ディスクへの読み書き状況などが表示
「-f」オプション
⇒システムが起動してからコマンド実行時までの間に,プロセスを作成した回数が表示

一般的な使い方
>vmstat 10 3
10秒間隔で3回表示

2.uptime
Linuxサーバーは常時稼働しているので、稼働時間が意外と長いです。
これを実行すると何だコレは?みたいな時間が表示される事と思います。
(Windowsサーバーだと、年に一回以上は再起動するんですけどね・・・。)
⇒連続稼働時間が長くなれば故障、メモリリーク等の問題が発生しがちです。

3.PS
これは余りにもオプションが多いので割愛させてください。
一般的な使い方
>ps aux
>ps auxf
「-f」オプションを加えるとプロセスのツリー構造まで表示される。

4.TOP
普通にオプション無しで実行
>top
ただし、そのままだと永遠に更新するので回数制限くらいは付けておいた方が良いと思います。
>top -n 3

これくらい調べれば、おおよその事はわかります。
あとは表示された情報に基づいて、Apache(httpd.conf)、PHP(php.ini)、MySQL(my.cnf)等の編集を実施しましょう。

PHPを最大に生かすApacheのチューニングとは?2 はコメントを受け付けていません。タグ :

PHPを最大に生かすApacheのチューニングとは?

2018年04月14日 · Apache, PHP, Server

ApacheにPHPを組み合わせるのは一般的だが、今まではほぼデフォルトで運用して来ました。
ある日、突然WEBサイトが遅くなったのでこれを機会にチューニングというか最適化を調べてみる事に。

まずApacheですが、「httpd.config」からやってみよう。
いろいろとググってみると、【prefork】をいじれと書いてあるので。
Apacheのバージョンは2.2系を想定しています。

以下【prefork】のデフォルトです。
StartServers 8
MinSpareServers 8
MaxSpareServers 8
ServerLimit 100
MaxClients 100
MaxRequestsPerChild 4000
MaxMemFree 1024

上から順に公式ページを調べてみる。
1.StartServers
起動時に生成される子サーバプロセスの数と書いてある。
デフォルトは8で、普通は2とか4なので十分らしい。

2.MinSpareServers
アイドルな子サーバプロセスの最小個数とあるが、どこのアイドル?と一瞬考えてしまった。
アイドリングのアイドルらしい。
リクエストを扱っていないプロセス数の事らしい。
こいつを大きくするのは、めっちゃ混んでいるサーバ以外はやめろと記載あり。
AMAZONとか楽天とかなんだろうな、該当するようなサーバーは。

しかし、デフォルトは最小で8って多くないか?
もっと少なくてもいいと思う。(別にチューニングしなくても良い項目)

3.MaxSpareServers
アイドルな子サーバプロセスの希望最大個数らしい。
2と同様でこれもチューニングの必要を感じない。
と言うか、2より必要性を感じないので放置で。

4.ServerLimit
設定可能なサーバプロセス数の上限と書いてある。
Apacheプロセス稼働中におけるMaxClientsに設定可能な上限値を設定することになります。
だから最近のhttpd_configに記載が無いのか!
安定動作させるのは、MaxClientsデフォルト値(256)とイコールだから・・・。
「必要以上に大きな値に 設定された場合は、余計な未使用共有メモリが割り当てられます。」らしい・・・
逆に言えば、常にMaxClientsと同じ値を設定しておけばいいのですね。

5.MaxClients
リクエストに応答するために作成される 子プロセスの最大個数と書いてある。
リクエストが来たら作成されるプロセスの数量ならば、多いほどいいのでは?
でも、CPUのパワーやメモリの容量によって一度に処理できるプロセスは異なるからただ増やしても無駄らしい。
よって、通常よりもマシマシで設定する。

6.MaxRequestsPerChild
個々の子サーバが稼働中に扱うリクエスト数の上限と書いてある。
0は無制限なので、0以外を設定する。(0を設定するメリットが見えない。)
それによって、以下の効果が見込める。
メモリーリークが起こった場合に プロセスが消費するメモリの総量を制限できる
プロセスに有限のライフタイムを設定することで、 サーバ負荷が下がった時にプロセス数を少なくすることができる

7.MaxMemFree
デフォルトは記載されていないが、デフォルトは0らしい(無制限)
なのでチューニング不要
Apacheの使用するメモリを制限しても意味が無いので。

ここまで調べて思ったが、1,2,5,6以外はデフォルトで問題なし。
さて、これらをチューニングしていくわけだが何をどう調べて設定すればいいのか?
これから調べていきます。

前提としてサーバーは自社もしくは、自分が構築したもの(ROOT権限あり)とします。
長くなって来たので続きは2へ

PHPを最大に生かすApacheのチューニングとは? はコメントを受け付けていません。タグ :