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

How Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceHow Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceBrendan Gregg
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
Tuning TCP and NGINX on EC2
Tuning TCP and NGINX on EC2Tuning TCP and NGINX on EC2
Tuning TCP and NGINX on EC2Chartbeat
 
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜VirtualTech Japan Inc.
 
Revisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerRevisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerYongseok Oh
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング勲 國府田
 
A Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPFA Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPFoholiab
 
Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra...
 Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra... Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra...
Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra...HostedbyConfluent
 
MongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerMongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerWiredTiger
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~NTT Communications Technology Development
 
LISA2019 Linux Systems Performance
LISA2019 Linux Systems PerformanceLISA2019 Linux Systems Performance
LISA2019 Linux Systems PerformanceBrendan Gregg
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法Yohei Azekatsu
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門Shuji Yamada
 
Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)
Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)
Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)涛 吴
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介Tetsutaro Watanabe
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)涛 吴
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてNTT DATA Technology & Innovation
 

Tendances (20)

MongoDB Oplog入門
MongoDB Oplog入門MongoDB Oplog入門
MongoDB Oplog入門
 
How Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for PerformanceHow Netflix Tunes EC2 Instances for Performance
How Netflix Tunes EC2 Instances for Performance
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
Tuning TCP and NGINX on EC2
Tuning TCP and NGINX on EC2Tuning TCP and NGINX on EC2
Tuning TCP and NGINX on EC2
 
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
これから始める人のための自動化入門 〜Ubuntu Jujuを使って〜
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
Revisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerRevisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS Scheduler
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング
 
A Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPFA Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPF
 
Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra...
 Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra... Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra...
Disaster Recovery Options Running Apache Kafka in Kubernetes with Rema Subra...
 
MongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerMongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTiger
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
LISA2019 Linux Systems Performance
LISA2019 Linux Systems PerformanceLISA2019 Linux Systems Performance
LISA2019 Linux Systems Performance
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門
 
Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)
Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)
Behind Pegasus, What matters in a Distributed System (Arch summit shenzhen_2017)
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
 

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. ありがとうございました。 もっとこうしたほうがいいという ご意見ありましたらぜひ伺いたいです!