Nginx+Mojolicious+Tengパフォーマンスチューニング
reverse proxyの設定が利いていなかった。
Plack::Middlewareのログで判明したのが、nginxが静的ページを返してなかったので、過去の自分のブログを見て設定を直して、静的ページのアクセスがアプリサーバに流れてこないようにした。
SQLの見直し
PerlBeginnersで教えてもらった。explain select でテーブル古スキャンが実行されていたので、インデックスを使うSQLに修正した。
バッファープールヒット率の調査
mysqlで以下のコマンドを発行してバッファープールヒット率を調査。 とりあえず、ヒットしているような・・・ freeページも1000あるし足りているようだ。
SHOW ENGINE INNODB STATUS\G
---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 137363456; in additional pool allocated 0 Dictionary memory allocated 330672 Buffer pool size 8191 Free buffers 1024 Database pages 6731 Old database pages 2464 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages made young 14358, not young 1846733 0.00 youngs/s, 0.00 non-youngs/s Pages read 39461, created 237, written 38233 0.00 reads/s, 0.00 creates/s, 0.00 writes/s Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000 Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s LRU len: 6731, unzip_LRU len: 0 I/O sum[0]:cur[0], unzip sum[0]:cur[0]
テーブルのデータとインデックスのサイズを知りたいとき - MySQL Casual
thread_cache
この辺は設定して損はないので設定してみた。max_connections 100に対して、thread_cache25 thread_cacheについて
メモリ不足か・・
vmstatでみたところ、結構な頻度でスワップが発生していた。 結局、いっぱいStarletのプロセスを上げていたり、mysqlあったりでメモリを使ってしまっているようで。 そのせいで早い時もあれば遅い時もあるんだなぁ。