apache WEBサーバー ダウン 大量アクセス

数万PVに耐えるApacheチューニング

優 apache WEBサーバー ダウン 大量アクセス

apache チューニング PVに耐える

不意の大量アクセス

その時、そのWEBサーバーを落とさないために。

1日100万PVってどんなWEBサーバー?

1日は86400秒だから、1日100万PVを稼ぎたいなら、秒間12アクセスを捌ければOKということになる。こう考えると、ハードルは低く感じるよな。ただし、アクセスには大きな波がある。だから余裕をもって同時200接続は軽く捌きたいところだ。それぐらいのピンチを切り抜けられるエンジンを積んでおけばひとまずは安心できる。

Googleアナリティクスのアクティブユーザ数

実は全く本当の意味での同時接続じゃない。あれは単位時間当たりのアクセスのべ数だ。

Apacheのチューニング

基本となるApacheのチューニングを行う。

KeepAliveはOnにしよう(推奨)

1プロセスでTimeoutで指定した秒数までまとめて処理してくれるが、KeepAliveTimeoutは2秒程度に短くするのが安全。回線が遅い人が多くなってくるとフリーズする危険性がある。そうなったらどうしようもない。

 

# vi /etc/httpd/conf/httpd.conf

KeepAlive Off

↓変更

#KeepAlive Off←無効化
KeepAlive On←追加


MaxKeepAliveRequests 100

↓変更

#MaxKeepAliveRequests 100←無効化
MaxKeepAliveRequests 1000←追加


KeepAliveTimeout 15

↓変更

#KeepAliveTimeout 15←無効化
KeepAliveTimeout 2←追加

 

 

出たっ!必殺 mod_expireの導入

ブラウザに静的ファイルを指定した期間キャッシュさせる。380行目付近に追加するぞ!

 

 

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 12 days"
ExpiresByType image/gif "access plus 12 days"
ExpiresByType image/jpg "access plus 12 days"
ExpiresByType image/jpeg "access plus 12 days"
ExpiresByType image/png "access plus 12 days"
ExpiresByType application/x-javascript "access plus 12 days"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType text/js "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>

 

 

これで終わりだと思ったか? mod_deflate!

データを圧縮してユーザに送信するのだ。

 

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE

# Mozilla4系などの古いブラウザで無効、しかしMSIEは除外
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# gifやjpgなど圧縮済みのコンテンツは再圧縮しない
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI _\.utxt$ no-gzip

# htmlやcssなどは圧縮
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
</IfModule>

いよいよだな、preforkチューニング!

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
&amp;lt;IfModule prefork.c&amp;gt;
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
&amp;lt;/IfModule&amp;gt;

↓変更

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
&amp;lt;IfModule prefork.c&amp;gt;
#StartServers 8
#MinSpareServers 5
#MaxSpareServers 20
#ServerLimit 256
#MaxClients 256
#MaxRequestsPerChild 4000

#チューニング^~^ @see http://httpd.apache.org/docs/2.0/ja/mod/mpm_common.html
#起動初期に自動生成されるプロセス数
StartServers 10
#待機(アイドル状態)の最小プロセス
MinSpareServers 20
#待機(アイドル状態)の最大プロセス
MaxSpareServers 60
#サーバーが処理できる子プロセス最大数( ※必ずMaxClientsの上に書くこと)
ServerLimit 100
#リクエストに応答するために作成される 子プロセスの最大個数(クライアント数)
MaxClients 100
# 個々の子プロセスが扱うことのできるリクエストの制限数
MaxRequestsPerChild 1000
#free() が呼ばれない限り、 メモリ確保と開放を管理する主メモリアロケータが保持し続けられるメモリの最大量(※ 0は無制限)
#MaxMemFree 2048
&amp;lt;/IfModule&amp;gt;

WEB用途に特化させる為に始めから多めにプロセスを待機させておくといい。

 

 

※restartでは反映されない可能性がある。

 

# service httpd stop

# service httpd start

 

 

PHPの設定

# vi /etc/php.ini

 

知ってますか?

デフォルト設定では1プロセスあたり最大128MBのメモリを消費することを・・・

 

 

PHPのメモリ最大使用量 = MaxClients × memory_limit

 

つまりデフォルトだと256×128M = 32768MB(32.7GB)使用できる設定で、物理メモリだけでなく仮想メモリまでと、あるだけリソースを食い尽くしてしまう危険性がある。

 

 

memory_limit = 128M

↓変更

;memory_limit = 128M←無効化
memory_limit = 16M←追加

 

 

チューニング後

MaxClients100 × memory_limit16M = 1600M(1.6GB)

 

現実的な数字になったな。memory_limitは30MBを基準に考えるといい。

メモリが16Gあるならmomory_limitは32Mと仮定して、MaxClients200だとする。

 

MaxClients200 × memory_limit32M = 6400M(6.4G)

 

こうなると、まだまだメモリに余裕があるからMaxClientは400ぐらい増やしてもいいな。なんてにやにや考えられる!また、絶対的に必要なメモリ量は動作させるアプリによる。

ここは注意したい

メモリを絞りすぎると処理できずにエラーに繋がる。趣味程度のブログなら最悪落ちてもいいが、収益性の高いサービスサイト、業務を支えるWEBシステムとなればダウンすることは許されない。緩めすぎず、絞りすぎといったチューニングの見せ所だな。結局のところ、メモリの配分について考えるのが大事で、memory_limitはデフォルトでいじらなくても構わない。

 

【APC ( Alternative PHP Cache )インストール】

中間コードをメモリにキャッシュしてくれる。

# yum -y install php-pecl-apc

 

# vi /etc/php.d/apc.ini

 

apc.shm_size=64M

↓変更

;apc.shm_size=64M
apc.shm_size=256M

 

 

サーバを再起動させて反映させてくれ。

# service httpd stop
# service httpd start

 

 

最後にエラーログがないか確認しよう。
# cat /var/log/httpd/error_log

 

PHP5.5以上向け Zend Opcache, APCuインストール

Opcache Control Panel

PHP5.5以上の環境ならこちらの記事も参照してくれ。PHPが加速するぞ。
APCu , OPcacheの導入 PHP サーバ高速化

 

 

エラー 落ちてしまったら・・・

 

WEBサーバー ダウンさせない

すまない。

 

だが、安心してほしい。

 

ここはITシステムを扱っている会社のWEBサイトなんだ。君の役に立ちたいと考えている。そうだな、この機会に我々システムガーディアンの高速WEBサーバー+静的キャッシュ+負荷分散+静的ファイルストレージシステム構築サービスを検討してみてくれないか。実績として1000万PVオーバーのWEBサーバを多数運用している。

 

もし動かしたいものがWordpressのようなCMSなら、レスポンスだって大切さ。長くても5秒以内に表示出来なければ、普通は覗いてもくれないもんだぜ。つまり1秒間にどれだけリクエストを処理できるかってことだな。WEBサーバのみをチューニングをするというのは限界があるのさ。気軽に相談してくれ。

 

【宣伝】Wordpressに最適化した高速WEBサーバーの構築

NAC3 LAMPチューニング 高速 WordPress アダルトサイト AWS 大量アクセス サーバー Nginx キャッシュ

 1000万PVオーバーのトラフィック対応

  • トラフィックと予算に合わせた適切なサイジングで設計
  • クラウドにも対応だから急な増設も安心
  • 負荷分散 + トリプル高速キャッシュの軽量設計
  • メディアサイト案件多し
  • アダルトサイト対応可能
  • コンサルティング/運用保守サポート
  • DBの冗長構成、自律起動システム対応可能

どれだけ捌けるの?

MySQL 冗長化 Nginx 高速化 プロキシ 大量アクセス 処理 サーバー落ちた オートスケール

いくらでも捌けます。

可能な限りサーバにチューニングを行い、アクセスアップに応じて並列的にサーバーを増やして負荷分散 + 冗長構成を行うのでいくらでも。

 

WordPress アダルト 高速化 大量アクセス キャッシュ 負荷分散 万PV

○○ぐらいのアクセスがあるけど大丈夫?

ご相談下さい。アクセス増加に応じた将来的な提案も可能です。Yahoo!砲だってOK!

 

yahoo砲 apache チューニング

1番ご相談の多い月間500万PV級のチューニング Apacheの使用例

 

動作や表示の遅延もなく軽快に処理しています。

また、並列処理が得意なNginxの採用で更に軽量高速な処理が可能です。

 

MySQLチューニングの例 InnoDB

MySQL チューニング メモリ スペック サポート innodb

DBサーバの例

 

チューニング後ではMySQLの最大使用可能メモリ容量が大幅アップしています。デフォルト状態での使用ではせっかくのハードウェア性能を発揮できません。チューニングにより眠っているパフォーマンスを覚醒。上位性能のサーバーに変更する前にチューニングで劇的に改善出来る場合が多い。

 

PR: 負荷やページが表示されない等困ってませんか。

WordPress アダルト 高速化 大量アクセス キャッシュ 負荷分散 万PV

WordPress以外のWEBサービスにも対応しております。

お気軽にご相談下さい。

 

関連

 

なんだか大変そうだなあと感じたら是非お任せ下さい。よくある構成からピンまでキリまであります。お気軽にお問い合わせ下さい。

 

apache WEBサーバー ダウン 大量アクセス
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG