SlideShare une entreprise Scribd logo
1  sur  20
WEBサーバのチューニング
     CONTENTS
      ⇒ Apache
      ⇒ その他

 ※普段のデフォルトからの変更内容とその他。
    もっとこうしたほうがいいという
  ご意見ありましたらぜひ伺いたいです!


                       @smallpalace
自己紹介

ID:Twitter   smallpalace
お仕事:
  課金系ASPや各種携帯サービス運営等をしている会社
  でサーバインフラ系の仕事をしています。+主婦。
興味のあること:
  楽して高速化、効率よく設定運用し寝る時間を確保
比較的好きなこと:
  MySQL、シェルスクリプト
好きな食べ物:
  早朝メンテ明けに一人で築地に行く程度に魚が好きです。
 Apache
httpd-2.2.3-43.el5.centos.3
サーバの情報を隠ぺいする

 44,45c44
 < ServerTokens Prod
 < TraceEnable off
                         ・ ProductOnly。気休めのセキュリティ対策。バージョン
 ---                     等を隠す。
                          クライアントのリクエストに応答するヘッダ内でApache
 > ServerTokens OS       としか表示されなくなる。
                         ・ Traceメソッドを使えないようにするBasic認証のパス
                         ワードトレース防止

 532c524
 < ServerSignature Off   ・ エラーメッセージ出力時にフッタを表示しない。気休め。
 ---
 > ServerSignature On
キープアライブ関連
69c68
< Timeout 60
---
> Timeout 120           ・1分待ったらタイムアウトとする。



75c74                   ・1度の接続で複数リクエストのやり取りをする、キープ
                        アライブを有効にする。
< KeepAlive On
                        ・KeepAliveTimeoutを1ページのコンテンツが表示し終
---                     わる時間+α にする。
> KeepAlive Off
                        ・変えたことがないが、MaxKeepAliveRequestsを1
88c87                   ページあたりの最大ファイル数+α にするといいらしい。
< KeepAliveTimeout 3    ・キープアライブをONにして問題でたことはないが、
---                     OFFにした時に問題出たことはある。(混雑時間帯に
                        ロードアベレージが急騰するなど。規模的には大体
> KeepAliveTimeout 15   300~500万PV/日の環境で。)
preforkのMPM関連設定
102c101
< StartServers     15
---                       ・phpなのでpreforkつかっている。

> StartServers      8     ・最初に起動しとくプロセス数、待ち受けるプロセスを増やす。
                          アクセス来てからプロセス生成する時間を削減する意味合い。

105,107c104,106
                                ・ServerLimitはmunin等のグラフで見るときに見
< ServerLimit     150           やすくするためにへらしてる

< MaxClients      100           ・memory_limit(php.ini)*MaxClients
                                =WEB専用機ならOS搭載メモリの6~8割くらい。
< MaxRequestsPerChild   100
                                ・子プロセスを受け付ける最大値。超えたらメモリ
---                             を解放して子プロセスを再度生成

> ServerLimit     256           ※MaxRequestsPerChildは100~1000の間が
                                適切と@ITに書いてあった。mixiは50と技術者ブ
> MaxClients      256           ログか書籍か何かに書いてた。規模によるしあまり
                                小さくすると子プロセス生成の為のCPUコストが必
> MaxRequestsPerChild   4000    要になりそう。
未使用モジュールをロードしない
162,163c161,162
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
176c175
#LoadModule dav_module modules/mod_dav.so
180c179
#LoadModule dav_fs_module modules/mod_dav_fs.so
189,193c188,192
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
mv /etc/httpd/conf.d/proxy.conf{,_bk}


※主にとめてるのは、ldapとwebdavとproxyモジュール。
  静的コンテンツと動的コンテンツをサーバごと分けたほうがよいらしく、その場合proxyモジュール使うと思われます。
遅くなるけどserver-statusをとる
 ExtendedStatus On
 <Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny from all
 Allow from 127.0.0.1
 </Location>


  ・ muninとかでグラフ化する。リダイレクトされてしまうときは127.0.0.1のvhost作って入れる。
   変な動き(localhostへのアクセス)してるPGが居ないのをログで確認してから。
固有の値を変える
266c265
< ServerName s.hoge.jp:80
---
> #ServerName www.example.com:80
282c281
< DocumentRoot "/home/hoge/htdocs"
---
> DocumentRoot "/var/www/html"


・ サーバ名とドキュメントルートを指定。 別名はVirtualHostコンテキストの中に、
 ServerAliasディレクティブによってスペース区切りで書ける。
Directoryオプション指定など
307c306
< <Directory "/home/hoge/htdocs">
---
> <Directory "/var/www/html">
321c320
<     Options ExecCGI FollowSymLinks
---
>     Options Indexes FollowSymLinks
328c327
<     AllowOverride All
                                  ・ ディレクトリツリーが見えてしまうのでIndexes
---                               は無効にする、CGIを有効にする
>     AllowOverride None          ・ AllowOverrideを有効にすると起動時だけで
                                    なくアクセスくるたびに走査され、効率が悪いが、
                                    開発効率的な都合で頼まれがち。Directoryを
                                    限定して設定したほうがベター。
ログの管理①
< ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/s.hoge.jp-error_log.%Y%m%d
86400 540"
---
> ErrorLog logs/error_log

<   SetEnvIf   Request_URI "root¥.exe" nolog
<   SetEnvIf   Request_URI "Admin¥.dll" nolog
<   SetEnvIf   Request_URI "NULL¥.IDA" nolog       ・ ワームやmuninやロードバランサから
<   SetEnvIf   Request_URI "chk¥.html" nolog       のアクセスはログに記録しないことで無
<   SetEnvIf   Request_URI "server-status" nolog   駄なI/Oを減らす。
<   SetEnvIf   User-Agent libwww-perl nolog        ・ 1日で切りまわして巨大なファイルにな
<   SetEnvIf   Remote_Host "127¥.0¥.0¥.1" nolog    らないようにする。


< CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/logs/s.hoge.jp-
access_log.%Y%m%d 86400 540" combined env=!nolog
---
> CustomLog logs/access_log combined


・ 別途findで昨日までのログを圧縮したり1年前の古いログの削除などをするスクリプトを作りcronでまわす。
  他にsyslogは1年分残して圧縮するようにしたりなど。
ログの管理②
 ・ 終了ステータス、レスポンスタイムを知りたい時はLogFormatに%Xと%Dを追加する。
504c485
< LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-
Agent}i¥" %X %D" combined
---
> LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-
Agent}i¥"" combined

・ 複数WEBサーバの場合はloggerで渡してrsyslogでtcpで(@2つ指定するとtcp)転送してログサーバのsyslog-
ngで受け取ってWEBサーバのI/Oを削減して高速化。
 ログサーバ側は結構負荷かかる為、接続上限増やしsysctl.conf設定等を行う。
      httpd.conf:
       CustomLog "|/usr/bin/logger -p local6.info -t httpacc_`uname -n`" combined
      rsyslog.conf:
       *.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
       local6.info            @@log-server-ip
      syslog-ng.conf:
       source src {
       unix-stream ("/dev/log");
       internal();
       tcp(ip("0.0.0.0") port(514) max_connections(1000));
       };
       destination httpacc {
             file("/var/log/syslog-ng/access_log_$HOST" template(t_msgonly));
       };
       destination httperr {
             file("/var/log/syslog-ng/error_log_$HOST" template(t_msgonly));
       };
       filter f_httpacc { facility(local6) and level(info) and program(httpacc_); };
       filter f_httperr { facility(local6) and level(info) and program(httperr_); };
       log { source(src); filter(f_httpacc); destination(httpacc); flags(final); };
       log { source(src); filter(f_httperr); destination(httperr); flags(final); };
言語の設定
721c731
< LanguagePriority   ja en ca cs da de el eo es et fr he
hr it ko ltz nl nn   no pl pt pt-BR ru sv zh-CN zh-TW
---
> LanguagePriority   en ca cs da de el eo es et fr he hr
it ja ko ltz nl nn   no pl pt pt-BR ru sv zh-CN zh-TW

737c747
< #AddDefaultCharset UTF-8
---
> AddDefaultCharset UTF-8


・ エラードキュメント等で優先的に表示される言語を日本語にする(先頭をjaにする)。

・ デフォルト設定を無効にする(メタタグで文字コード指定されてない場合に強制的に変換表示され化けるのを防ぐ)
mod_cache メモリ

LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so


<IfModule mod_cache.c>
<IfModule mod_mem_cache.c>
CacheEnable mem /            # キャッシュ方式と対象URL
MCacheSize 65536             # キャッシュメモリの最大値(Kbyte)
MCacheMaxObjectCount 100     # キャッシュに保管されるドキュメント最大数
MCacheMinObjectSize 1        # キャッシュに保管されるドキュメント最小数
MCacheMaxObjectSize 2048     # キャッシュに保管されるドキュメント一つ当たりの最大サイズ(byte)
</IfModule>
</IfModule>


・ 上記はSoftwareDesign2008/10 に掲載されていたそのまま。
  http://smallpalace.jpn.ph/html/modules/pico0/index.php?content_id=250
・ ミッションクリティカルなサービスでの実績なし。手順書サーバ等に設定してみたところ体感ではかなり早くなった。
mod_cache ディスク
<IfModule mod_cache.c>
<IfModule mod_disk_cache.c>
CacheEnable disk /                   # キャッシュ方式と対象URL
CacheRoot /var/cache/apache          # キャッシュデータの保管先
CacheDirLevels 5                     # キャッシュデータを保管するディレクトリ階層の深さ
CacheDirLength 3                     # キャッシュデータを保管するディレクトリ名の文字数


CacheDisable /htdocs/output          # キャッシュしない対象URL
CacheIgnoreCacheControl On           # リクエストヘッダ無視し強制的にキャッシュから返す
          CacheIgnoreNoLastMod On    # 最終更新時刻のないヘッダでも強制キャッシュ
          CacheStorePrivate On       # ヘッダのCache-ControlがPrivateでも強制キャッシュ
          CacheMaxExpire 2592000     # キャッシュの有効期間を秒で指定
          CacheMaxFileSize 1000000   # キャッシュを許容する最大ファイルサイズ(byte)
          CacheMinFileSize 100       # キャッシュを許容する最小ファイルサイズ(byte)
          CacheStoreNoStore On       #ヘッダのCache-ControlがNo-Storeでも強制キャッシュ
</IfModule>
</IfModule>

・ お客様が使ってるのを見かけた。ただし仮想サーバでディスクI/Oが多いのは避けるべき。(急に落ちたりしていた)
・ 手順書サーバ等に設定してみたところ体感ではメモリよりは遅く、数日後みたらswapしていて逆に遅くなっていた。
 そのた(Apache以外)
sysctl.conf カーネルパラメータ調整
(kernel2.6/CentOS5.5)
・ swap発生しづらくする(60->30,DB専用機の場合は0にする)
vm.swappiness=30

・ TCPのfinwaitをリサイクル(0->1)、タイムアウト値(60->10)を短くする(NAT環境では非推奨)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10

・ 超えるとsynが捨てられるキュー数の上限を広げる(1024->8192,対複数なサーバで特に必要)
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192

・ TCPのキープアライブの間隔(7200->10,15->3)、リトライ回数(9->2)の調整(CLOSE_WAITが減る)
net.ipv4.tcp_keepalive_intvl = 3
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 10


※TCP接続をリサイクルするので実際問題が出たケースとして、、
 1つのFWのzone間の通信(NAT有り)というのがありました。
※他はスループットが良くなったとは言われても問題が出たと言われたことは特になし。
不要なcron・サービスの停止
 #   chmod   0   /etc/cron.daily/makewhatis.cron
 #   chmod   0   /etc/cron.daily/mlocate.cron
 #   chmod   0   /etc/cron.daily/prelink
 #   chmod   0   /etc/cron.daily/0logwatch
 #   chmod   0   /etc/cron.weekly/makewhatis.cron
 #   chmod   0   /etc/cron.weekly/99-raid-check

     ・仮想サーバだと、相載せのサーバとI/Oなどのリソースを共有してるので、
     明け方の負荷の低い時間帯だとしても皆で同じ時間に負荷の高いcronが動いた場合、落ちたり切替ったり遅くなったりする。
     故に必要ない処理は一切しないように止めておいた方がいい。


 # chkconfig --list | grep 3:on | awk '{print $1}' ¥
 |grep -Ev "anacron|crond|haldaemon|messagebus|httpd|munin-
 node|network|sshd|syslog|sysstat" > /root/stopinitscript
 # cat /root/stopinitscript
 # STOPD=`cat /root/stopinitscript`
 # for i in $STOPD; do chkconfig $i off; done
 # chkconfig --list | grep 3:on
     自動起動の設定を、止めたくないものを指定してそれ以外を止めている
コンテンツ共有にNFSは使わない
コンテンツ同期はrsync等を使う。まだNFSなとこは以下調整している。
・NFSプロセス増やす(cat                   /proc/net/rpc/nfsd |grep thして右側の数字が増えてたら)

  RPCNFSDCOUNT=8 -> 32 (/etc/init.d/nfs)
・起動時にプロセスに割り当てるメモリ増やす
 start)
 echo 262144   >   /proc/sys/net/core/rmem_default
 echo 524288   >   /proc/sys/net/core/rmem_max
 echo 262144   >   /proc/sys/net/core/wmem_default
 echo 524288   >   /proc/sys/net/core/wmem_max
 nfs起動処理
 echo 110592   >   /proc/sys/net/core/rmem_default
 echo 131071   >   /proc/sys/net/core/rmem_max
 echo 110592   >   /proc/sys/net/core/wmem_default
 echo 131071   >   /proc/sys/net/core/wmem_max

・マウントオプション非同期にする
   /dir 192.168.0.0/255.255.255.0(async,rw,no_root_squash)
・マウントオプションで一度にやり取りする量をふやす
   hard,intr,async,bg,rsize=32768,wsize=32768
 ※サイズの算出方法:上限はカーネルによって異なる。kernelソースのinclude/linux/nfsd/const.h にあるNFSSVC_MAXBLKSIZE で決まる

・ガベージコレクションを無効にしてセッションはNAS側で消す
 session.gc_probability = 1 -> 0
 find /data/phpsession -name "sess_*" -size -100 -type f -amin +180 -exec rm -f {} ¥;

・mod_cacheもいいと思います(そのうち画像や音声など静的コンテンツで使いたい)。
ありがとうございました。
   もっとこうしたほうがいいという
 ご意見ありましたらぜひ伺いたいです!

Contenu connexe

Tendances

Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!デベロッパーネットワーク
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Mitsuru Kariya
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニングyoku0825
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方GMO-Z.com Vietnam Lab Center
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
rsyncのちょっとイイ話
rsyncのちょっとイイ話rsyncのちょっとイイ話
rsyncのちょっとイイ話Kazuhiro Oinuma
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
NGINX Back to Basics: Ingress Controller (Japanese Webinar)NGINX Back to Basics: Ingress Controller (Japanese Webinar)
NGINX Back to Basics: Ingress Controller (Japanese Webinar)NGINX, Inc.
 
nioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になったnioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になったchibochibo
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 

Tendances (20)

Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
rsyncのちょっとイイ話
rsyncのちょっとイイ話rsyncのちょっとイイ話
rsyncのちょっとイイ話
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
NGINX Back to Basics: Ingress Controller (Japanese Webinar)NGINX Back to Basics: Ingress Controller (Japanese Webinar)
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
 
nioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になったnioで作ったBufferedWriterに変えたら例外になった
nioで作ったBufferedWriterに変えたら例外になった
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 

Similaire à Webサーバのチューニング

MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング純生 野田
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニングCraft works
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料oranie Narut
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
VarnishCache入門Rev2.1
VarnishCache入門Rev2.1VarnishCache入門Rev2.1
VarnishCache入門Rev2.1Iwana Chan
 
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したいAwsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい聡 大久保
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 

Similaire à Webサーバのチューニング (20)

MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
PostgreSQL Query Cache - "pqc"
PostgreSQL Query Cache - "pqc"PostgreSQL Query Cache - "pqc"
PostgreSQL Query Cache - "pqc"
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
VarnishCache入門Rev2.1
VarnishCache入門Rev2.1VarnishCache入門Rev2.1
VarnishCache入門Rev2.1
 
Nginx
NginxNginx
Nginx
 
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したいAwsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 

Plus de Yu Komiya

Chef localmodeをためした
Chef localmodeをためしたChef localmodeをためした
Chef localmodeをためしたYu Komiya
 
時短主婦の味方のご紹介
時短主婦の味方のご紹介時短主婦の味方のご紹介
時短主婦の味方のご紹介Yu Komiya
 
MySQL5.6関連情報まとめ
MySQL5.6関連情報まとめMySQL5.6関連情報まとめ
MySQL5.6関連情報まとめYu Komiya
 
Lvsをvpc上に構築してみた話
Lvsをvpc上に構築してみた話Lvsをvpc上に構築してみた話
Lvsをvpc上に構築してみた話Yu Komiya
 
Chef社内向け解説とその課題について
Chef社内向け解説とその課題についてChef社内向け解説とその課題について
Chef社内向け解説とその課題についてYu Komiya
 
My sqlのha構成について
My sqlのha構成についてMy sqlのha構成について
My sqlのha構成についてYu Komiya
 
MHAを検証して導入した話
MHAを検証して導入した話MHAを検証して導入した話
MHAを検証して導入した話Yu Komiya
 

Plus de Yu Komiya (8)

Chef localmodeをためした
Chef localmodeをためしたChef localmodeをためした
Chef localmodeをためした
 
Remotework
Remotework Remotework
Remotework
 
時短主婦の味方のご紹介
時短主婦の味方のご紹介時短主婦の味方のご紹介
時短主婦の味方のご紹介
 
MySQL5.6関連情報まとめ
MySQL5.6関連情報まとめMySQL5.6関連情報まとめ
MySQL5.6関連情報まとめ
 
Lvsをvpc上に構築してみた話
Lvsをvpc上に構築してみた話Lvsをvpc上に構築してみた話
Lvsをvpc上に構築してみた話
 
Chef社内向け解説とその課題について
Chef社内向け解説とその課題についてChef社内向け解説とその課題について
Chef社内向け解説とその課題について
 
My sqlのha構成について
My sqlのha構成についてMy sqlのha構成について
My sqlのha構成について
 
MHAを検証して導入した話
MHAを検証して導入した話MHAを検証して導入した話
MHAを検証して導入した話
 

Webサーバのチューニング

  • 1. WEBサーバのチューニング CONTENTS ⇒ Apache ⇒ その他 ※普段のデフォルトからの変更内容とその他。 もっとこうしたほうがいいという ご意見ありましたらぜひ伺いたいです! @smallpalace
  • 2. 自己紹介 ID:Twitter smallpalace お仕事: 課金系ASPや各種携帯サービス運営等をしている会社 でサーバインフラ系の仕事をしています。+主婦。 興味のあること: 楽して高速化、効率よく設定運用し寝る時間を確保 比較的好きなこと: MySQL、シェルスクリプト 好きな食べ物: 早朝メンテ明けに一人で築地に行く程度に魚が好きです。
  • 4. サーバの情報を隠ぺいする 44,45c44 < ServerTokens Prod < TraceEnable off ・ ProductOnly。気休めのセキュリティ対策。バージョン --- 等を隠す。 クライアントのリクエストに応答するヘッダ内でApache > ServerTokens OS としか表示されなくなる。 ・ Traceメソッドを使えないようにするBasic認証のパス ワードトレース防止 532c524 < ServerSignature Off ・ エラーメッセージ出力時にフッタを表示しない。気休め。 --- > ServerSignature On
  • 5. キープアライブ関連 69c68 < Timeout 60 --- > Timeout 120 ・1分待ったらタイムアウトとする。 75c74 ・1度の接続で複数リクエストのやり取りをする、キープ アライブを有効にする。 < KeepAlive On ・KeepAliveTimeoutを1ページのコンテンツが表示し終 --- わる時間+α にする。 > KeepAlive Off ・変えたことがないが、MaxKeepAliveRequestsを1 88c87 ページあたりの最大ファイル数+α にするといいらしい。 < KeepAliveTimeout 3 ・キープアライブをONにして問題でたことはないが、 --- OFFにした時に問題出たことはある。(混雑時間帯に ロードアベレージが急騰するなど。規模的には大体 > KeepAliveTimeout 15 300~500万PV/日の環境で。)
  • 6. preforkのMPM関連設定 102c101 < StartServers 15 --- ・phpなのでpreforkつかっている。 > StartServers 8 ・最初に起動しとくプロセス数、待ち受けるプロセスを増やす。 アクセス来てからプロセス生成する時間を削減する意味合い。 105,107c104,106 ・ServerLimitはmunin等のグラフで見るときに見 < ServerLimit 150 やすくするためにへらしてる < MaxClients 100 ・memory_limit(php.ini)*MaxClients =WEB専用機ならOS搭載メモリの6~8割くらい。 < MaxRequestsPerChild 100 ・子プロセスを受け付ける最大値。超えたらメモリ --- を解放して子プロセスを再度生成 > ServerLimit 256 ※MaxRequestsPerChildは100~1000の間が 適切と@ITに書いてあった。mixiは50と技術者ブ > MaxClients 256 ログか書籍か何かに書いてた。規模によるしあまり 小さくすると子プロセス生成の為のCPUコストが必 > MaxRequestsPerChild 4000 要になりそう。
  • 7. 未使用モジュールをロードしない 162,163c161,162 #LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so 176c175 #LoadModule dav_module modules/mod_dav.so 180c179 #LoadModule dav_fs_module modules/mod_dav_fs.so 189,193c188,192 #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so mv /etc/httpd/conf.d/proxy.conf{,_bk} ※主にとめてるのは、ldapとwebdavとproxyモジュール。 静的コンテンツと動的コンテンツをサーバごと分けたほうがよいらしく、その場合proxyモジュール使うと思われます。
  • 8. 遅くなるけどserver-statusをとる ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> ・ muninとかでグラフ化する。リダイレクトされてしまうときは127.0.0.1のvhost作って入れる。 変な動き(localhostへのアクセス)してるPGが居ないのをログで確認してから。
  • 9. 固有の値を変える 266c265 < ServerName s.hoge.jp:80 --- > #ServerName www.example.com:80 282c281 < DocumentRoot "/home/hoge/htdocs" --- > DocumentRoot "/var/www/html" ・ サーバ名とドキュメントルートを指定。 別名はVirtualHostコンテキストの中に、 ServerAliasディレクティブによってスペース区切りで書ける。
  • 10. Directoryオプション指定など 307c306 < <Directory "/home/hoge/htdocs"> --- > <Directory "/var/www/html"> 321c320 < Options ExecCGI FollowSymLinks --- > Options Indexes FollowSymLinks 328c327 < AllowOverride All ・ ディレクトリツリーが見えてしまうのでIndexes --- は無効にする、CGIを有効にする > AllowOverride None ・ AllowOverrideを有効にすると起動時だけで なくアクセスくるたびに走査され、効率が悪いが、 開発効率的な都合で頼まれがち。Directoryを 限定して設定したほうがベター。
  • 11. ログの管理① < ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/s.hoge.jp-error_log.%Y%m%d 86400 540" --- > ErrorLog logs/error_log < SetEnvIf Request_URI "root¥.exe" nolog < SetEnvIf Request_URI "Admin¥.dll" nolog < SetEnvIf Request_URI "NULL¥.IDA" nolog ・ ワームやmuninやロードバランサから < SetEnvIf Request_URI "chk¥.html" nolog のアクセスはログに記録しないことで無 < SetEnvIf Request_URI "server-status" nolog 駄なI/Oを減らす。 < SetEnvIf User-Agent libwww-perl nolog ・ 1日で切りまわして巨大なファイルにな < SetEnvIf Remote_Host "127¥.0¥.0¥.1" nolog らないようにする。 < CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/logs/s.hoge.jp- access_log.%Y%m%d 86400 540" combined env=!nolog --- > CustomLog logs/access_log combined ・ 別途findで昨日までのログを圧縮したり1年前の古いログの削除などをするスクリプトを作りcronでまわす。 他にsyslogは1年分残して圧縮するようにしたりなど。
  • 12. ログの管理② ・ 終了ステータス、レスポンスタイムを知りたい時はLogFormatに%Xと%Dを追加する。 504c485 < LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User- Agent}i¥" %X %D" combined --- > LogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User- Agent}i¥"" combined ・ 複数WEBサーバの場合はloggerで渡してrsyslogでtcpで(@2つ指定するとtcp)転送してログサーバのsyslog- ngで受け取ってWEBサーバのI/Oを削減して高速化。 ログサーバ側は結構負荷かかる為、接続上限増やしsysctl.conf設定等を行う。 httpd.conf: CustomLog "|/usr/bin/logger -p local6.info -t httpacc_`uname -n`" combined rsyslog.conf: *.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages local6.info @@log-server-ip syslog-ng.conf: source src { unix-stream ("/dev/log"); internal(); tcp(ip("0.0.0.0") port(514) max_connections(1000)); }; destination httpacc { file("/var/log/syslog-ng/access_log_$HOST" template(t_msgonly)); }; destination httperr { file("/var/log/syslog-ng/error_log_$HOST" template(t_msgonly)); }; filter f_httpacc { facility(local6) and level(info) and program(httpacc_); }; filter f_httperr { facility(local6) and level(info) and program(httperr_); }; log { source(src); filter(f_httpacc); destination(httpacc); flags(final); }; log { source(src); filter(f_httperr); destination(httperr); flags(final); };
  • 13. 言語の設定 721c731 < LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW --- > LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW 737c747 < #AddDefaultCharset UTF-8 --- > AddDefaultCharset UTF-8 ・ エラードキュメント等で優先的に表示される言語を日本語にする(先頭をjaにする)。 ・ デフォルト設定を無効にする(メタタグで文字コード指定されてない場合に強制的に変換表示され化けるのを防ぐ)
  • 14. mod_cache メモリ LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule file_cache_module modules/mod_file_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so <IfModule mod_cache.c> <IfModule mod_mem_cache.c> CacheEnable mem / # キャッシュ方式と対象URL MCacheSize 65536 # キャッシュメモリの最大値(Kbyte) MCacheMaxObjectCount 100 # キャッシュに保管されるドキュメント最大数 MCacheMinObjectSize 1 # キャッシュに保管されるドキュメント最小数 MCacheMaxObjectSize 2048 # キャッシュに保管されるドキュメント一つ当たりの最大サイズ(byte) </IfModule> </IfModule> ・ 上記はSoftwareDesign2008/10 に掲載されていたそのまま。 http://smallpalace.jpn.ph/html/modules/pico0/index.php?content_id=250 ・ ミッションクリティカルなサービスでの実績なし。手順書サーバ等に設定してみたところ体感ではかなり早くなった。
  • 15. mod_cache ディスク <IfModule mod_cache.c> <IfModule mod_disk_cache.c> CacheEnable disk / # キャッシュ方式と対象URL CacheRoot /var/cache/apache # キャッシュデータの保管先 CacheDirLevels 5 # キャッシュデータを保管するディレクトリ階層の深さ CacheDirLength 3 # キャッシュデータを保管するディレクトリ名の文字数 CacheDisable /htdocs/output # キャッシュしない対象URL CacheIgnoreCacheControl On # リクエストヘッダ無視し強制的にキャッシュから返す CacheIgnoreNoLastMod On # 最終更新時刻のないヘッダでも強制キャッシュ CacheStorePrivate On # ヘッダのCache-ControlがPrivateでも強制キャッシュ CacheMaxExpire 2592000 # キャッシュの有効期間を秒で指定 CacheMaxFileSize 1000000 # キャッシュを許容する最大ファイルサイズ(byte) CacheMinFileSize 100 # キャッシュを許容する最小ファイルサイズ(byte) CacheStoreNoStore On #ヘッダのCache-ControlがNo-Storeでも強制キャッシュ </IfModule> </IfModule> ・ お客様が使ってるのを見かけた。ただし仮想サーバでディスクI/Oが多いのは避けるべき。(急に落ちたりしていた) ・ 手順書サーバ等に設定してみたところ体感ではメモリよりは遅く、数日後みたらswapしていて逆に遅くなっていた。
  • 17. sysctl.conf カーネルパラメータ調整 (kernel2.6/CentOS5.5) ・ swap発生しづらくする(60->30,DB専用機の場合は0にする) vm.swappiness=30 ・ TCPのfinwaitをリサイクル(0->1)、タイムアウト値(60->10)を短くする(NAT環境では非推奨) net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 10 ・ 超えるとsynが捨てられるキュー数の上限を広げる(1024->8192,対複数なサーバで特に必要) net.ipv4.tcp_max_syn_backlog = 8192 net.core.somaxconn = 8192 ・ TCPのキープアライブの間隔(7200->10,15->3)、リトライ回数(9->2)の調整(CLOSE_WAITが減る) net.ipv4.tcp_keepalive_intvl = 3 net.ipv4.tcp_keepalive_probes = 2 net.ipv4.tcp_keepalive_time = 10 ※TCP接続をリサイクルするので実際問題が出たケースとして、、 1つのFWのzone間の通信(NAT有り)というのがありました。 ※他はスループットが良くなったとは言われても問題が出たと言われたことは特になし。
  • 18. 不要なcron・サービスの停止 # chmod 0 /etc/cron.daily/makewhatis.cron # chmod 0 /etc/cron.daily/mlocate.cron # chmod 0 /etc/cron.daily/prelink # chmod 0 /etc/cron.daily/0logwatch # chmod 0 /etc/cron.weekly/makewhatis.cron # chmod 0 /etc/cron.weekly/99-raid-check ・仮想サーバだと、相載せのサーバとI/Oなどのリソースを共有してるので、 明け方の負荷の低い時間帯だとしても皆で同じ時間に負荷の高いcronが動いた場合、落ちたり切替ったり遅くなったりする。 故に必要ない処理は一切しないように止めておいた方がいい。 # chkconfig --list | grep 3:on | awk '{print $1}' ¥ |grep -Ev "anacron|crond|haldaemon|messagebus|httpd|munin- node|network|sshd|syslog|sysstat" > /root/stopinitscript # cat /root/stopinitscript # STOPD=`cat /root/stopinitscript` # for i in $STOPD; do chkconfig $i off; done # chkconfig --list | grep 3:on 自動起動の設定を、止めたくないものを指定してそれ以外を止めている
  • 19. コンテンツ共有にNFSは使わない コンテンツ同期はrsync等を使う。まだNFSなとこは以下調整している。 ・NFSプロセス増やす(cat /proc/net/rpc/nfsd |grep thして右側の数字が増えてたら) RPCNFSDCOUNT=8 -> 32 (/etc/init.d/nfs) ・起動時にプロセスに割り当てるメモリ増やす start) echo 262144 > /proc/sys/net/core/rmem_default echo 524288 > /proc/sys/net/core/rmem_max echo 262144 > /proc/sys/net/core/wmem_default echo 524288 > /proc/sys/net/core/wmem_max nfs起動処理 echo 110592 > /proc/sys/net/core/rmem_default echo 131071 > /proc/sys/net/core/rmem_max echo 110592 > /proc/sys/net/core/wmem_default echo 131071 > /proc/sys/net/core/wmem_max ・マウントオプション非同期にする /dir 192.168.0.0/255.255.255.0(async,rw,no_root_squash) ・マウントオプションで一度にやり取りする量をふやす hard,intr,async,bg,rsize=32768,wsize=32768 ※サイズの算出方法:上限はカーネルによって異なる。kernelソースのinclude/linux/nfsd/const.h にあるNFSSVC_MAXBLKSIZE で決まる ・ガベージコレクションを無効にしてセッションはNAS側で消す session.gc_probability = 1 -> 0 find /data/phpsession -name "sess_*" -size -100 -type f -amin +180 -exec rm -f {} ¥; ・mod_cacheもいいと思います(そのうち画像や音声など静的コンテンツで使いたい)。
  • 20. ありがとうございました。 もっとこうしたほうがいいという ご意見ありましたらぜひ伺いたいです!