GIJIN.NET

ITと音楽の狭間

Tech

Apacheのチューニング

投稿日:2014年9月16日 更新日:

gijin.netをはじめてから一週間。

最初は遊びで作っていたのですが、なんのかんのでメインBlogになりつつあります。AWSの勉強がてら、という事もあって、あまりWebサーバとかそっちには力を入れないつもりだったんですけどね。

ここ数日、つながりにくくなる事がよくありまして。ブラウザで見ていると、突然うんともすんとも言わなくなってしまいます。特に記事をアップしてすぐとか。あまりWebサーバに詳しくはないのですが、これはきっとApacheかなぁ、とか。構築した時のデフォルトそのまんまにしてますからねぇ。

そんなわけで、Apacheのチューニングを実施してみました。

参考にしたのはOSSコンソーシアムのこちらの記事
詳細は上記のリンク先をご確認くださいな。

早速、AWSで立ち上げているWebサーバへsshでログイン。記事にあるコマンドで状態を見てみます。
[code]free[/code]

このコマンドは、メモリの使用状況を調査するためのものです。今回はAWSのmicroインスタンスを使っており、起動直後にこのfreeコマンドを打つ事で、メモリの状態をまず確認します。

total used free shared buffers cached
Mem: 1020528 142968 877560 0 9196 78468
-/+ buffers/cache: 55304 965224
Swap: 0 0 0

Apacheに割り当て可能な最大メモリ量は-/+ buffers/cache:行のfree列との事ですので、それを見てみます。上記の表から「965224」が割り当て可能な最大メモリ量となりますね。まぁこの値をギリギリに使っちゃうと、それはそれでキャッシュやバッファに使う分を圧迫しちゃうという事で、まぁ適度に、というところですかね。

ちなみに記事の中や、Googleで同様の記事を読んでると、同じサーバでDBサーバも兼ねている場合もあるようで、まぁその時はそっちの分も考えておく必要があるでしょうね。とりあえず私の場合はDBサーバは別のインスタンスで上げているので、今回は気にしない事にします。

次はApacheが実際に使っているメモリ量を調査します。

先のリンクでは、次のように書かれていました。

今回はPreforkで動作させるので、Apacheはスレッドを使わずに、1つの親プロセスとリクエストを受け付ける複数の子プロセスで動作します。

preforkについてちょっと説明。
親プロセスが、リクエストがある度に子プロセスを起動(forkっていう)し、実際の通信は子プロセスが行うわけです。ただ、リクエストの度にforkしちゃうと、forkが終わるまでに待ち時間ができちゃって、通信が遅くなっちゃいますよ、と。

preforkというのは、最初からいくつか子プロセスをforkしちゃっておくやり方。最初からforkしておくんで、fork完了するまでの待ち時間、っていうのが無いので、高速にリクエストに答えられる、というわけです。

ということで、やろうとする事は単純で、この「子プロセス」を最大でいくつ上げておけるか、というのを調査します。

Apacheが使っているメモリ量を調査するコマンドを、先のリンクからコピってつかってみます。

[code]ps aux | grep [h]ttpd | grep [a]pache | awk ‘BEGIN{x=0}{x+=$6}END{ print x/NR }'[/code]

結果は「5484」との事。

さていよいよ、Apacheの最大子プロセス数を計算します。
計算式は次の通り。

Apacheの最大子プロセス数 : P =
Apacheに割り当て可能なメモリ量 / Apacheの子プロセスあたりの平均メモリ使用量

じゃあこれに当てはめて
965224 / 5484 = 176

これでP = 176という結果になりました。

じゃあ早速チューニング作業です。
httpd.confの中の、preforkの設定を変更しましょう。

[code]sudo vi /etc/httpd/conf/httpd.conf[/code]

preforkで検索します。
「IfModule prefork.c」 というのが見つかるはず。

これも先のリンクにあるものを抜粋して、それぞれの設定の意味を載せておきます。

StartServers :
起動時に作成する子プロセス数
MinSpareServers :
リクエスト待ち状態の子プロセスがこの数値より少ない場合は新しく子プロセスを作成する
MaxSpareServers :
リクエスト待ち状態の子プロセスがこの数値より多い場合は超過した子プロセスを終了する
ServerLimit :
起動可能な子プロセスの最大値、変更には再起動が必要
MaxClients :
起動可能な子プロセスの最大値、リロードで変更可能
MaxRequestsPerChild :
子プロセスがこの回数までリクエストを受け付けたら、子プロセスを終了する

実際の値についても、以下の通り計算してみました。


StartServers P×5/256
MinSpareServers P×5/256
MaxSpareServers P×10/256
ServerLimit P
MaxClients P
MaxRequestsPerChild 1000

Pの値をそれぞれいれれば、それっぽい数字が出てきますよね。それをそのまま設定して、Apacheを再起動してみました。

おお、なんか安定したかも???

まぁこれで様子を見て、ですかね。個人的にはnginxとかmysqlのチューニング(RDSに替える、ってのもやってみたい)とかとかもまぁどこかでやってみるつもりなので・・・まぁそのうちに。

-Tech
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

MacBook Pro 13inchがやってきた

あれ、気づけばもう9月になってるじゃん! ということでなんとか生きております。

no image

作ってみた!

夏休みの宿題にするつもりで積ん読リストに入っちゃってた「Amazon Web Service c基礎からのネットワーク&サーバー構築」に手を出してみた。

no image

ちょっとハマった話

昨日、AWSで作ってみたこのBlogなんだけど、ちょっとハマった事があったのでメモで書いておく。 大きくは二つ。 (1)鍵認証のための鍵をSCPでアップロード出来ない問題 (2)Global IPの変 …

ようやくhttps化が終わりました

Google Chromeさんあたりが「https化してないサイトはChromeで警告出て見れなくなるかもよ」みたいな通達をしてからもうだいぶ経ち、タイムリミット近い・・・というあたりでようやく対応し …

Apacheチューニング、の訂正というか

いやー、昨日の記事、いろいろツッコミを受けましたw

2023/12/31

またまた一年ぶりの更新・・・2023年もお世話になりました

なんかもう一年に一回とかしか更新しなくなってきたな・・・良くないな・・・。

2022/12/31

え?一年更新してなかった?というわけで今年もお世話になりました

前回の更新が昨年の大晦日ですか・・・。 Blogを更新しようという気力が湧かなかったこともあり、一年放置してしまいました。

2021/12/31

2021年振り返り(いろんな「モノ」編)

あれ?もう2021年終わり?今年のBlog記事、いくつ出したっけ?

2021/10/13

10年ひとむかし

前回が2月?そんなに書いてなかったっけ? ということで、気付けば2021年も残り3ヶ月切ったとかマジですか。

2021/02/17

そしてRazerへ・・・〜Razer BlackWidow Lite〜

昨日、あんな話題を書いておきながら、今日使っているキーボードは違ってたりしますが何か。

管理人:ぎじん

岩手県出身のアマボエ(アマチュアオーボエ)奏者 ときどき 棒振りになったりする40代♂
震災後に転職、単身東京(妻子は盛岡に残してた)だったんだけど一時的に盛岡に戻ってきてたり。IT業界の混沌とした流れに身を任せつつ、仕事と趣味の狭間にあるものを書き留めていくとかそんな感じ。
2014年9月
 123456
78910111213
14151617181920
21222324252627
282930