Raspberry Pi – nginx プロキシキャッシュの RAMディスク化

Webサーバー サイトの運用
nginx Reverse Proxy
プロキシキャッシュの RAMディスク化
 
サーバーを「Raspberry Pi 4 4GB」にアップグレードしてから、いくつもの改善・改良を進め、サイトの高速化を図ってきたが、Raspberry Pi 4 の売り物である「4GBのメモリ」が全く生かされていない。
 
『Reverse Proxy』のメモリ使用状況を、「free -h」コマンドで確認
 
以下、少しでも「4GBのメモリ」を活用すべく、プロキシキャッシュの RAMディスク化を行った記録。
 
 

 

スポンサー リンク

 

 
 
 
 
 
1. Reverse Proxy の稼働環境とメモリー使用状況
 
「Raspberry Pi 4 4GB」4台、全てに【Nginx + PHP + MariaDB】をインストールして、『Reverse Proxy + Web Server System』を運用中。

「Raspberry Pi 4 4GB」4台、全てに【Nginx + PHP + MariaDB】をインストールして、『Reverse Proxy + Web Server System』を運用中
 
Reverse Proxy』のメモリ使用状況を、「free -h」コマンドで確認。
『Reverse Proxy』のメモリ使用状況を、「free -h」コマンドで確認
 
top」コマンドで、現在実行中のプロセスとCPU利用率を表示。
「top」コマンドで、現在実行中のプロセスとCPU利用率を表示
 
 
メモリ使用状況に於ける項目の意味。
total:全メモリ
free:全く利用されていないメモリ
buff/cache:キャッシュとして利用されているが、解放の可能性があるメモリ
used: = total - free - buff/cache
available:スワップせずに利用可能と見積もられたメモリ
shared:物理メモリのうち、共有メモリの使用量
 
 
「Raspberry Pi 4 4GB」の、殆んどのメモリー(84%)が【 free 】になっている。
→ このメモリを有効活用して、サイトの高速化を図る方法はないか?。
 
 
 
2. php-fpmのチューニング検討
 
メモリーに余裕があるので、
プロセス数を増やすことが出来るのではないか?
 

 php-fpmの調節
 WordPress などの動的サイトは、Webサーバーがクライアントからリクエストを受けると、サーバー上でPHPを実行して動的にページを生成し、生成したページをレスポンスとしてクライアントに返します。
 この、サーバー上でPHPを実行する仕組みphp-fpmです。
 php-fpmでは、リクエストのたびにプロセスを生成していたのでは非効率なので、原則あらかじめ1つないし複数のワーカープロセス(以下、「プロセス」と書きます)を起動しておき、サーバーに届いたリクエストの処理に割り当てます。このプロセスの集まりのことを、プールと言います。
 起動しているプロセスの数によって、サーバーの同時接続可能数やリソース使用量(CPU、メモリ、ディスク等)が変動します。多くのプロセスが起動していれば、それだけ多くの接続を一度に捌くことができますが、リソース消費は増大します。

 
『Reverse Proxy』には、WordPressをインストールしていないので、関係ない・・・か。
 
Reverse Proxy』で、実行中のプロセスを「ps aux --sort -rss」コマンドで一覧表示してみる。
『Reverse Proxy』で、実行中のプロセスを「ps aux --sort -rss」コマンドで一覧表示してみる
 
Reverse Proxy』の、メモリー情報ファイルの内容を「cat /proc/meminfo」で表示してみる。
『Reverse Proxy』の、メモリー情報ファイルの内容を「cat /proc/meminfo」で表示してみる
 
Reverse Proxy』の、slab領域を「sudo slabtop -o」コマンドで確認してみる。
『Reverse Proxy』の、slab領域を「sudo slabtop -o」コマンドで確認してみる
 
 

 Slabとは
Slab キャッシュは、ディレクトリのメタデータ情報を格納する dentry やファイルのメタデータ情報を格納する inode 構造体などをキャッシュしているカーネル内のメモリ領域です。 ... Linux において、ページサイズ未満のメモリは SLAB (スラブ)という仕組みで管理されています。

 
 
プロセス数が設定されている、【 /etc/php-fpm.d/www.conf 】のデフォルト値を確認してみる。
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s;
;pm.max_requests = 500
 
設定値の意味。
pm = dynamic:プロセス数を動的に変えるモード
pm.max_children = 5:最大のプロセス数
pm.start_servers = 2:起動時のプロセス数
pm.min_spare_servers = 1:暇なときに残っているプロセスの最小値 pm.max_spare_servers = 3:暇なときに残っているプロセスの最大値 ;pm.process_idle_timeout = 10s;
;pm.max_requests = 500:一つのプロセスがこの数値分リクエストを受けたら終了すると言う設定
 
 

 pm.max_children
CPUのコア数を超えるプロセス数を起動しても同時に実行することはできません。 また、メモリ消費量が多すぎるとswap領域を使うようになり、かえって逆効果になります。

 
 
Reverse Proxy での設定。(値の妥当性⁇)
 
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 30
;pm.process_idle_timeout = 10s;
pm.max_requests = 500 ・・・コメントアウトを外す
 
Webサーバー側での設定。
 
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s;
;pm.max_requests = 500
 
 
 
3. プロキシキャッシュのサイズを確認
 
プロキシキャッシュをRAMディスク化するに当って、現在使用されているプロキシキャッシュのサイズを確認してみた。
 
プロキシキャッシュのサイズを、「sudo du -sh /var/cache/nginx/*/」コマンドで表示してみる。
プロキシキャッシュのサイズを、「sudo du -sh /var/cache/nginx/*/」コマンドで表示してみる
 
稼働中サイトの、プロキシキャッシュのサイズは【807M】と【269M】で、このサイズならメモリの空き容量で十分カバーできる、・・・と考える。
 
RAMディスクの状態を、「df -h | grep tmpfs」コマンドで確認してみる。
RAMディスクの状態を、「df -h | grep tempfs」コマンドで確認してみる
 
RAMディスクの中には、【/dev/shm】という 1.9G の空きスペースがあるので、ここを使用しても良いか・・・と考える。
 

 RAMディスクとは
コンピュータのメインメモリ(RAM)の一部の領域をストレージ(外部記憶装置)のように利用するシステム。 超高速なファイルシステムとして使用できるが、電源を落とすと内容は失われる。

 
管理の容易さを考慮し、プロキシキャッシュ専用のRAMディスクを、サイト別に用意することにした。
 
 
 
4. プロキシキャッシュのRAMディスク化
 
/etc/nginx/nginx.conf での、プロキシキャッシュの設定状況。
    # proxy cache on arakan60.com
    proxy_cache_path      /var/cache/nginx/arakan60 levels=2:2 keys_zone=arakan60:30m inactive=2h max_size=512m;

    # proxy cache on arakoki70.com
    proxy_cache_path      /var/cache/nginx/arakoki70 levels=2:2 keys_zone=arakoki70:30m inactive=2h max_size=512m;

    # proxy cache on luxsite arakan60.site
    proxy_cache_path      /var/cache/nginx/luxsite levels=2:2 keys_zone=luxsite:30m inactive=2h max_size=512m;
 
/etc/fstab を編集。
sudo nano /etc/fstab
 
nginx.conf で設定している【max_size】に合わせて、下記設定を追記。
# Proxy Cache の RAM Disk 化
tmpfs /var/cache/nginx/arakan60 tmpfs size=512m,mode=775,uid=nginx,gid=nginx 0 0
tmpfs /var/cache/nginx/arakoki70 tmpfs size=512m,mode=775,uid=nginx,gid=nginx 0 0
tmpfs /var/cache/nginx/luxsite tmpfs size=512m,mode=775,uid=nginx,gid=nginx 0 0
 
ここで、一旦リブートする。
 
RAMディスクの状態を、「df -h | grep tmpfs」コマンドで確認してみる。
RAMディスクの状態を、「df -h | grep tempfs」コマンドで確認してみる。
 
サイト別の、プロキシキャッシュ専用のRAMディスクが準備できた。
 
df -h」で、ディスクの空き容量を確認。
「df -h」で、ディスクの空き容量を確認
 
本番切替前なので、使用率は【0%】。
 
 
 
5. 結果の評価
 
プロキシキャッシュのサイズとRAMディスクの使用率。
プロキシキャッシュのサイズとRAMディスクの使用率
 
プロキシキャッシュでの使用量は、「352M + 217M = 569M」。
一つのサイトは、割り当てた「512MB」に対して、すぐに【69%】の使用率になった。
 
メモリ使用量の変化。

メモリ使用量の変化
 
差異。
usd:+11Mi とほとんど増えていない。
shared:+518Mi と、大幅に増えた。
buff/cache:+225Mi と、少し増えた。
 
shared】は使用量ではない。
【shared】は使用量ではない
 
RAMディスク化したプロキシキャッシュが、【buff/cache】にカウントされるのであれば、増加分の値「225M」とRAMディスクの使用量の値「569M」に差があり過ぎる。
 
 
『PageSpeed Insights』における、評価スコアに大きな変化は見られなかった。
 
 
参考:
 
以上。
(2020.08.25)
 

 

スポンサー リンク

 

             

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください