KUSANAGIのチューニング設定を調査
KUSANAGIを試したときにチューニング設定がとても勉強になるなぁと思って調査したときの覚書。
環境: ConoHa VPS メモリ8G/CPU6コア、KUSANAGI Version 9.4.12-1.el9
設定項目を1つずつ調査して意味を理解していく。
PHPのチューニング設定
PHPの設定確認。
# cd /etc/opt/kusanagi/
# less php.d/php.ini
post_max_size = 16M ;POSTメソッドの最大サイズ
upload_max_filesize = 16M ;アップロードされるファイルの最大サイズ
date.timezone = UTC ;タイムゾーン。"Asia/Tokyo"に変更
php-fpmの設定を確認。
参考: PHP: 設定 - Manual
# less php-fpm.d/www.conf
user = httpdgroup = www
listen = 127.0.0.1:9000 ;unix socketに変更
pm.start_servers = 10 ;プロセス開始時のプロセス数
pm.min_spare_servers = 5 ;待ち状態の最小プロセス数
pm.max_spare_servers = 15 ;待ち状態の最大プロセス数
pm.max_requests = 500 ;再起動するまでの実行リクエスト数
slowlog = /var/opt/kusanagi/log/php-fpm/www-slow.log
request_slowlog_timeout = 10
request_terminate_timeout = 180catch_workers_output = yes ;ワーカーの標準出力を本体にリダイレクトdecorate_workers_output = no ;ワーカーの標準出力の文字装飾
clear_env = no ;FPM ワーカー内の環境をクリアphp_admin_value[error_log] = /var/opt/kusanagi/log/php-fpm/www-error.logphp_admin_flag[log_errors] = onphp_value[session.save_handler] = filesphp_value[session.save_path] = /var/opt/kusanagi/lib/php/sessionphp_value[soap.wsdl_cache_dir] = /var/opt/kusanagi/lib/php/wsdlcache
Nginxのチューニング設定
Nginxの設定確認。
参考: Core functionality
# cd /etc/opt/kusanagi/nginx/
# less nginx.conf
user httpd www;worker_processes auto;worker_rlimit_nofile 20000; workerプロセスの最大オープンファイル数の上限
pcre_jit on; 正規表現のJITコンパイルevents {worker_connections 4096; 1つのworkerプロセスが開ける最大コネクション数multi_accept on; 一つのワーカープロセスを集中して使うようになるuse epoll; コネクションの処理方法}http {server_tokens off; レスポンスヘッダーにサーバー情報を表示しないserver_names_hash_bucket_size 128; server_nameが長くても大丈夫にするlimit_req_zone $remote_addr$http_x_forwarded_for zone=one:10m rate=100r/s; IPアドレスごとに1秒間に100リクエストの制限。client_max_body_size 20M; リクエストの最大サイズclient_body_buffer_size 768k; メモリ上のバッファに読み込む最大リクエストサイズsendfile on; sendfile()を使うかどうかtcp_nopush on; sendfileがon時にレスポンスヘッダとファイルの内容をまとめて送るtcp_nodelay on; バッファリングを無効にして遅延を最小化keepalive_timeout 5; 通信を持続する秒数connection_pool_size 1024; 接続あたりのメモリの割り当てrequest_pool_size 8k; リクエストあたりのメモリの割り当てgzip on;gzip_http_version 1.0;gzip_disable "msie6";gzip_proxied any;gzip_min_length 1024;gzip_comp_level 2;gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json; text/html以外に圧縮する形式brotli on; gzipと同等レベルの速度で高圧縮率な圧縮アルゴリズムbrotli_static on;brotli_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;brotli_comp_level 3;brotli_min_length 1024;open_file_cache max=100000 inactive=20s; ファイルのメタデータをキャッシュするopen_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;fastcgi_cache_path /var/opt/kusanagi/cache/nginx/wordpress levels=1:2 keys_zone=wpcache:30m max_size=512M inactive=600m;fastcgi_ignore_headers "Vary" "Cache-Control" "Expires";
}
conf.dにある設定ファイルの書き方も参考になる。
ちなみにWordPress公式サイトとMozillaのnginx設定例はこちら。
- Nginx – Advanced Administration Handbook | Developer.WordPress.org
- Mozilla SSL Configuration Generator
MariaDBのチューニング設定
MariaDBはリポジトリで配信されているものを使っている。
# cd /etc/my.cnf.d/
# less server.cnf
[mysqld]character_set_server = utf8mb4max_connections = 900thread_cache_size = 300table_cache = 256max_allowed_packet = 16Mquery_cache_size = 320Mtmp_table_size = 32Mmax_heap_table_size = 32Mthread_stack = 512Kmax_statement_time = 3600key_buffer_size = 32Msort_buffer_size = 2Mread_buffer_size = 2Mread_rnd_buffer_size = 1Mjoin_buffer_size = 1Mmyisam_sort_buffer_size = 1Mbulk_insert_buffer_size = 1Minnodb_buffer_pool_size = 3072M#innodb_log_file_size = 32M # 48M -10.4, 96M 10.5-#innodb_use_sys_malloc = 1 # DEPRECATED in 10.2innodb_thread_concurrency = 8log-error = /var/log/mysql/mysqld.loglog-warnings = 1slow_query_log = 1slow_query_log_file = "/var/log/mysql/slow.log"long_query_time = 1.2
意外に「thread_handling = pool-of-threads」が設定されていなかった。