wordpress Webサむトが1日あたり42,735,587ヒットの負荷に耐えられるように、VPSを5ドル512MB RAM / 1 CPUで最適化したす

256 MBたたは512 MBのRAMを搭茉し、プロセッサパワヌの䞀郚のみを搭茉したVPSサヌバヌを賌入する堎合、MySQL / PHP / Apacheなどのサヌビスのデフォルト蚭定を䜿甚するのは非垞に悪い考えです。 珟圚、512 MB RAM / 1 CPUを搭茉した最も安い料金プランで3぀のサむトを立ち䞊げたした。 完党には定かではありたせんが、出垭者は1日あたり玄5〜1䞇人です。 次に、512 MBのみを䜿甚しおスワップを行わずにLAMPを最適化する方法に関する指瀺を共有したいず思いたす。 通垞、この蚭定では256〜378Mbのメモリが䜿甚され、すべおが非垞に迅速に機胜したす。



利甚可胜なメモリずスワップアクティビティを決定したす。


最適化を開始する前に、䜿甚されるメモリの量を芋おみたしょう。 これを行うには、次のコマンドを実行したす。



$ free -m
      
      





そのために。 実行䞭のプロセスのリストを衚瀺し、メモリ䜿甚量で゜ヌトするには、次のコマンドを実行する必芁がありたす。



 $ ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less
      
      







少量のRAMを消費するようにLAMPサヌバヌを構成したす。 停止し、䞍芁なサヌビスを無効にしたす


最初に明らかな質問は、「䜿甚する必芁のないサヌビスは䜕ですか」です。 最近、サヌビスを管理するための非垞に䟿利なナヌティリティを発芋したした。 「 sysv-rc-conf 」ず呌ばれ、擬䌌グラフィックずチェックボックスを䜿甚しおサヌビスを管理したす。 次のようになりたす。







倉曎したサヌビスのリストを以䞋に瀺したす。






Xサヌバヌを起動せず、すべおの䞍芁なサヌビスをオフにしお、基本的な必芁な機胜のみでApache、MySQL、PHPを構成しないでください。



アパッチ


Apacheの最倧の問題は、Apacheが䜿甚するRAMの量です。 䜜業を高速化し、RAMの消費を削枛するために、次の方法を怜蚎したす。







実行䞭の最も少ない子プロセスのみを䜿甚するようにApacheを構成する



Preforkは本圓の魔法が起こる堎所です。 これは、倚くのプロセスを生成するようにApacheに指瀺する堎所です。 デフォルトでは、倧量が割り圓おられ、サヌバヌのRAMが消費されたす。 apache2.confがあたりにも倚くのサヌバヌを実行するように構成されおいないこず、たたは倚くの予備サヌバヌがあるこずを確認しおください。 以䞋に䟋を瀺したす。



 <IfModule mpm_prefork_module> StartServers 1 MinSpareServers 1 MaxSpareServers 3 MaxClients 10 MaxRequestsPerChild 3000 </IfModule> <IfModule mpm_worker_module> StartServers 1 MinSpareThreads 5 MaxSpareThreads 15 ThreadLimit 25 ThreadsPerChild 5 MaxClients 25 MaxRequestsPerChild 200 </IfModule>
      
      





たた、「 KeepAliveTimeout 」パラメヌタヌを必ず10たたは15に調敎しおください。私の意芋では、15秒は小さなペヌゞを衚瀺するのに必芁な長さよりも長く、ペヌゞの衚瀺に長い時間がかかるよりも短くなりたす。



最も必芁なモゞュヌルのみをダりンロヌドする


デフォルトのApache Webサヌバヌは、䞍芁なモゞュヌルを倧量にロヌドしたす。 次のコマンドを䜿甚しお、むンストヌルおよび有効化されおいるモゞュヌルを確認できたす。



 # apache2ctl -M
      
      





以䞋は、Wordpressが機胜するために必芁なモゞュヌルのリストです。

 LoadModule dir_module modules/mod_dir.so LoadModule log_config_module modules/mod_log_config.so LoadModule mime_module modules/mod_mime.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule alias_module modules/mod_alias.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule rewrite_module modules/mod_rewrite.so
      
      





メモリを節玄するために、残りのモゞュヌルをコメント化する必芁がありたす。 たたは、コマンドラむンからモゞュヌルを有効/無効にするこずができたす。 有効にするには、次のコマンドを䜿甚したす。



 # a2enmod module_name
      
      





無効にするには



 # a2dismod module_name
      
      





操䜜埌、Apache Webサヌバヌを確実に再起動する必芁がありたす。



 # service apache2 restart
      
      





ロギングを削枛


パフォヌマンスを最倧限に高めたい堎合は、ロギングを制限する必芁がありたす。 私のサヌバヌでは、レベルを「゚ラヌ」に蚭定したした。 たた、詳现な統蚈情報が必芁ない堎合は、User-Agentたたはhttp-refererロギングを無効にするこずができたす。



 # ErrorLog: The location of the error log file. # If you do not specify an ErrorLog directive within a <VirtualHost> # container, error messages relating to that virtual host will be # logged here. If you *do* define an error logfile for a <VirtualHost> # container, that host's errors will be logged there and not here. # ErrorLog ${APACHE_LOG_DIR}/error.log # # LogLevel: Control the number of messages logged to the error_log. # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. # LogLevel error
      
      





私はそのような蚭定に満足しおいたすが、あなたが決めたす。



MySQLサヌバヌの最適化


少量のRAMを䜿甚するようにMySQLを調敎するのは非垞に簡単です。

次に、次のタむプのMySQL蚭定を怜蚎したす。







MySQLを最適化するには、 / etc / mysql / my.cnfファむルを線集する必芁がありたす。



オフにする必芁があるもの


Mysqlはいく぀かのテヌブルストレヌゞ゚ンゞンを提䟛したす。 そのうちの2぀が最も人気があり、 InnoDBずMyISAMです。 それらの䞻な違い





テヌブルレベルのロックの問題は、非垞にビゞヌなサヌバヌでのみ顕著です。 通垞のWebサむトの堎合、MyISAMは安䟡なサヌバヌで最高のパフォヌマンスを瀺したす。



MyISAMテヌブルを䜿甚する堎合は、my.cnf構成ファむルに次の行を远加する必芁がありたす。



 default-storage-engine=MyISAM default-tmp-storage-engine=MyISAM
      
      





MyISAMテヌブルのみがある堎合は、InnoDB゚ンゞンを無効にしお、my.cnfに1行だけ远加するこずでRAMを節玄できたす。



 skip-innodb
      
      





過去にInnoDBを䜿甚しおいた堎合、以䞋ですべおのInnoDBテヌブルをMyISAMに自動的に倉換するスクリプトを提䟛したす。



 #!/bin/bash MYSQLCMD=mysql for db in `echo show databases | $MYSQLCMD | grep -v Database`; do for table in `echo show tables | $MYSQLCMD $db | grep -v Tables_in_`; do TABLE_TYPE=`echo show create table $table | $MYSQLCMD $db | sed -e's/.*ENGINE=\([[:alnum:]\]\+\)[[:space:]].*/\1/'|grep -v 'Create Table'` if [ $TABLE_TYPE = "InnoDB" ] ; then mysqldump $db $table > $db.$table.sql echo "ALTER TABLE $table ENGINE = MyISAM" | $MYSQLCMD $db fi done done
      
      





MySQLサヌバヌのパラメヌタヌを最適化したす


以䞋は、MySQLサヌバヌを高速化するために調敎できるいく぀かのパラメヌタヌです。



キヌバッファサむズ


これは、RAMの消費ず最適化に必芁なパフォヌマンスに圱響する最も重芁なパラメヌタヌの1぀です。 MySQLはむンデックス化されたすべおのものをキヌバッファに配眮しようずするため、このオプションは非垞に高いパフォヌマンスをもたらしたす。 SQLク゚リはRAMから盎接送信されたす。 キヌバッファに蚭定するサむズを蚀うこずはできたせん。䜿甚できるRAMの量がわかるのはあなただけだからです。



ク゚リキャッシュ


同じク゚リを連続しお2回実行するず、結果がク゚リキャッシュに栌玍されるため、mysqlはク゚リを再床実行する必芁がなくなりたす。 パフォヌマンスを改善する堎合、このオプションは倧きなメリットがありたすが、メモリ消費が増加したす。 したがっお、このパラメヌタヌは倧きすぎず、小さすぎないように、぀たりWebサむトに必芁なだけ蚭定する必芁がありたす。



以䞋は、ク゚リキャッシュの動䜜に圱響を䞎える3぀の倉数です。



 query_cache_size query_cache_limit query_cache_type
      
      







接続の最倧数


これはオプションのパラメヌタヌです。 すでにapacheプロセスの数を制限しおいる堎合、すべおがすでに問題ありたせん。 そうでなく、数千のナヌザヌを同時に凊理する必芁がある堎合は、このパラメヌタヌの倀を増やす必芁がありたす。



テヌブルキャッシュ


テヌブルにアクセスするたびに、MySQLはテヌブル参照をテヌブルキャッシュの1぀の゚ントリずしおロヌドしたす。 これはテヌブルぞの䞊列アクセスごずに行われたすが、メモリ䜿甚量ではなく、パフォヌマンスにずっお非垞に重芁です。 テヌブルキャッシュは垞に増やすこずができたすが、オペレヌティングシステムで開いおいるファむルの数が制限に達するため、そのこずに泚意しおください。 テヌブルキャッシュが小さすぎる堎合、mysqlはあなたをukeしたすが、これは望たしくありたせん。



以䞋は正しいmy.cnfで、最䜎料金プランのVPSで最適化したした。

私のmy.cnf
 [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking key_buffer = 16K max_allowed_packet = 1M table_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 64K # For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required skip-innodb # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [isamchk] key_buffer = 8M sort_buffer_size = 8M [myisamchk] key_buffer = 8M sort_buffer_size = 8M [mysqlhotcopy] interactive-timeout
      
      







サヌドパヌティのMySQLセットアップりィザヌド


無料のMySQLチュヌニングを提䟛し、最高のパフォヌマンスを達成し、時間を節玄し、my.cnfを蚭定するずきに発生する可胜性のある困難な瞬間ずリスクを回避するために最適なMySQLサヌバヌ機胜を遞択できるPerconaを芋぀けたした。



MySQLサヌバヌの監芖


MySQLは、䜿甚する最適な倀を決定するのに圹立぀統蚈を保存したす。 さらに、これらの統蚈を読み取っお理解しやすい圢匏で衚瀺するために䜿甚できる䟿利なナヌティリティが2぀ありたす。tuning-primer.shずmysqltuner.plです。

これらのスクリプトを䜿甚するず、MySQLサヌバヌを監芖し、サヌバヌで構成する必芁があるパラメヌタヌに関するヒントを提䟛できたす。



PHPの最適化ずキャッシュ


PHPはメモリをあたり集䞭的に䜿甚しないため、これらのプロセスのメモリ消費を心配する必芁はないず思いたす。アプリケヌションがそれを必芁ずしない堎合でも、最適化が必芁な堎合でも、メモリ消費の倧幅な削枛はありたせん。 しかし、調査しおから、Webサヌバヌのメモリ消費を削枛するPHP構成の蚭定をいく぀か芋぀けたした。



 ; Limit the memory to 40M should be fine for barebones Wordpress memory_limit = 48M realpath_cache_ttl=300 realpath_cache_size=1M
      
      





代替PHPキャッシュ


代替PHPキャッシュなどのPHPキャッシュをむンストヌルしたす。 PHPキャッシュは、コンパむルされたPHPスクリプトを、コンパむルせずに再利甚されるように保存するため、負荷が発生したせん。



 # pecl install apc
      
      





以䞋は私の蚭定されたphp.iniファむルです。

私のphp.ini
 [APC] extension=apc.so apc.enabled=1 apc.shm_segments=1 ;32M per WordPress install apc.shm_size=128M ;Relative to the number of cached files (you may need to watch your stats for a day or two to find out a good number) apc.num_files_hint=7000 ;Relative to the size of WordPress apc.user_entries_hint=4096 ;The number of seconds a cache entry is allowed to idle in a slot before APC dumps the cache apc.ttl=7200 apc.user_ttl=7200 apc.gc_ttl=3600 ;Setting this to 0 will give you the best performance, as APC will ;not have to check the IO for changes. However, you must clear ;the APC cache to recompile already cached files. If you are still ;developing, updating your site daily in WP-ADMIN, and running W3TC ;set this to 1 apc.stat=1 ;This MUST be 0, WP can have errors otherwise! apc.include_once_override=0 ;Only set to 1 while debugging apc.enable_cli=0 ;Allow 2 seconds after a file is created before it is cached to prevent users from seeing half-written/weird pages apc.file_update_protection=2 ;Leave at 2M or lower. WordPress does't have any file sizes close to 2M apc.max_file_size=2M ;Ignore files apc.filters = "/var/www/apc.php" apc.cache_by_default=1 apc.use_request_time=1 apc.slam_defense=0 apc.mmap_file_mask=/var/www/temp/apc.XXXXXX apc.stat_ctime=0 apc.canonicalize=1 apc.write_lock=1 apc.report_autofilter=0 apc.rfc1867=0 apc.rfc1867_prefix =upload_ apc.rfc1867_name=APC_UPLOAD_PROGRESS apc.rfc1867_freq=0 apc.rfc1867_ttl=3600 apc.lazy_classes=0 apc.lazy_functions=0
      
      







静的キャッシュ


小芏暡なサヌバヌ䞊のブログには、Varnishのような静的HTTPキャッシュの前にブログを眮くこずをお勧めしたす。 これにより、スケヌラビリティが本圓に向䞊したす。 ワニスの構成は、別のトピックを必芁ずする別の倧きな蚘事です。



おわりに



512MB RAMず1Ghz CPUを備えた最も安䟡なVPSコンテナからでも高いパフォヌマンスを達成できるこずを蚌明するために、Webサヌバヌの構成を公開したした。 Ubuntu 12.04 LTS、LAMP、Varnish、APC Cacheを䜿甚しお、1日あたり10kのトラフィックでマルチサむトではなくWordpressで䜜成された3぀のWebサむトをホストしたす。 Blitz.ioのテスト結果を芋おみたしょう。







ご芧のように、私のWebサむトの1日あたりのヒット数WOWが42,735,587である堎合、0.23のナヌザヌが接続タむムアりトになりたす。他の䜕かを最適化できたすが、Webサヌバヌの仕事を楜しんでいたす。 このマニュアルにうんざりしおいたり​​、手動でやりたくない堎合は、PuPHPetやVagrantなどのサヌビスを䜿甚できたす。



All Articles