Rapsberry Piの空きメモリをどれだけApache2.4に割り当てるかを試算する為、Apache2.4の子プロセスが使用するメモリの実測方法を説明します。
Apache2.4のマルチプロセッシングモジュール (MPM)は、複数の方式が選べるのですが、WordPressはPHPを使用しているので、万が一メモリリークが発生しても安心なPreforkを使用します。
Preforkは、子プロセスを複数個あらかじめ起動しておいて、同時のアクセスに瞬時にレスポンスが返せるようにする仕組みです。だから、大量の同時アクセスが有った時は、多数のプロセスが起動されメモリ不足となってしまいます。そこで、Apach2.4の子プロセスの起動できる最大数を設定します。
最大数を決める為には、空きメモリとApache2.4の子プロセス1個のサイズを知る必要が有ります。そこで、Apache2.4の子プロセス1個のメモリの測り方を説明します。
測定方法
測定方法は、とても簡単で、下記のコマンドを入力するだけです。
$ sudo echo -e "PID\tPPID\tRSS\tSHARED\tPRIVATE";ps -ef|gt"${args[2]}"\t";sudo cat /proc/${args[1]}/smaps|awk 'BEGIN{rss=0;shared=0;}/Rss1024,(rss-shared)/1024);}';done
PID PPID RSS SHARED PRIVATE
2158 1 31.9 25.0 6.9
2159 2158 9.4 9.3 0.1
2160 2158 9.4 9.3 0.1
2161 2158 9.4 9.3 0.1
2162 2158 9.4 9.3 0.1
2163 2158 9.4 9.3 0.1
青字がApache2.4の親プロセスです。
赤字がApache2.4の子プロセスです。
SHAREDが親プロセスと共有しているメモリのサイズです。親プロセスと子プロセスが共有しているメモリなので、子プロセス毎に加算する必要はありません。
PRIVATEが各子プロセスが使用しているメモリです。
Apache2.4の全子プロセスのPRIVATEのメモリの和を、子プロセス数で割ると平均的な子プロセスの使用メモリとなります。
では、子プロセスの使用メモリがどの程度か、実際に測定して子プロセスの使用メモリを想定します。
サーバの稼働状況から実測
システム起動直後の空きメモリ
下記コマンドで確認したメモリの空き容量は、3,542MBです。
$ free -m
total used free shared buff/cache available
Mem: 3793 176 3316 6 300 3542
Swap: 1023 0 1023
Apache2.4の子プロセスのメモリ実測
2023年1月25日の実測値は下記の通りです。
$ free -m
total used free shared buff/cache available
Mem: 3793 1562 1239 118 990 2036
Swap: 1023 0 1023
$ sudo echo -e "PID\tPPID\tRSS\tSHARED\tPRIVATE";ps -ef|grep apache2|grep -v grep|while read line;do args=(${line});echo -ne ${args[1]}"\t"${args[2]}"\t";sudo cat /proc/${args[1]}/smaps|awk 'BEGIN{rss=0;shared=0;}/Rss/{rss+=$2;}/Shared/{shared+=$2;}END{printf("%.1f\t%.1f\t%.1f\n",rss/1024,shared/1024,(rss-shared)/1024);}';done
PID PPID RSS SHARED PRIVATE
434 1 32.3 30.6 1.7
40522 434 105.6 93.1 12.5
40523 434 107.6 93.4 14.1
40524 434 107.0 92.5 14.5
40525 434 87.0 78.4 8.6
40526 434 120.6 105.5 15.0
40529 434 98.1 84.5 13.6
40538 434 112.5 100.4 12.1
40543 434 129.9 103.9 26.0
40777 434 114.8 97.2 17.6
40783 434 96.9 79.3 17.5
40794 434 134.5 110.0 24.5
41764 434 116.0 102.3 13.7
41766 434 91.8 83.3 8.5
41767 434 96.6 87.0 9.6
41769 434 97.9 83.0 14.9
41770 434 86.1 77.6 8.5
41771 434 108.6 88.9 19.8
41772 434 102.9 89.2 13.7
41773 434 72.4 60.6 11.8
41774 434 126.7 107.2 19.5
41775 434 92.2 79.3 12.9
41776 434 100.6 90.9 9.6
41777 434 70.0 59.9 10.2
41778 434 101.6 88.6 13.0
41779 434 131.1 111.6 19.5
41780 434 99.6 85.7 13.9
41781 434 76.7 61.1 15.6
41782 434 62.8 51.1 11.8
41783 434 123.5 104.9 18.6
41784 434 86.8 78.9 7.8
41785 434 69.4 62.4 7.0
41786 434 98.0 83.0 15.0
41787 434 78.4 70.0 8.4
41788 434 78.5 66.4 12.1
41789 434 84.4 72.1 12.3
41790 434 98.5 79.5 19.0
41791 434 112.0 101.6 10.5
41792 434 97.8 84.9 12.9
41793 434 122.6 105.1 17.5
41794 434 96.0 85.6 10.4
41795 434 75.5 63.6 11.9
41796 434 82.0 70.0 12.0
41797 434 77.0 64.8 12.2
41798 434 79.7 66.9 12.8
41799 434 95.9 82.3 13.6
41800 434 127.9 109.2 18.7
41801 434 116.2 100.5 15.7
41802 434 85.1 78.6 6.5
41803 434 80.7 66.9 13.8
41804 434 91.7 82.0 9.7
41805 434 85.8 71.8 14.1
41806 434 66.7 59.7 7.0
41807 434 90.0 77.7 12.3
41808 434 82.3 72.5 9.9
41809 434 94.8 82.2 12.7
41810 434 92.5 82.5 10.0
41811 434 86.1 76.8 9.4
41812 434 87.9 79.3 8.6
41813 434 86.5 78.5 8.0
41814 434 86.5 72.8 13.7
41815 434 96.3 83.7 12.6
41816 434 90.2 77.9 12.3
41817 434 60.7 51.6 9.0
41818 434 99.9 88.6 11.4
41819 434 71.6 60.5 11.1
41820 434 109.7 88.6 21.2
41821 434 89.0 78.0 11.0
41822 434 98.3 83.0 15.2
41823 434 88.9 78.7 10.2
41824 434 61.2 48.7 12.6
41825 434 87.4 79.2 8.2
41826 434 69.9 59.9 10.0
41827 434 99.7 79.3 20.4
41828 434 79.6 64.4 15.2
41829 434 77.8 68.5 9.3
41830 434 91.3 78.9 12.4
41831 434 90.4 79.1 11.3
41832 434 113.3 97.6 15.8
41834 434 78.1 66.9 11.2
41835 434 105.6 91.3 14.3
41836 434 95.6 83.1 12.5
41837 434 84.5 77.9 6.5
41838 434 81.2 67.6 13.6
41839 434 94.8 82.7 12.0
41840 434 106.4 83.9 22.5
41845 434 103.6 83.1 20.5
41846 434 97.6 84.4 13.2
41848 434 107.1 88.0 19.1
41850 434 76.7 68.5 8.3
41852 434 99.5 84.5 15.1
41853 434 100.6 87.5 13.1
41854 434 90.6 77.7 12.8
41855 434 107.5 86.8 20.7
41856 434 82.8 69.9 12.9
41857 434 84.8 79.8 5.0
41858 434 87.0 70.5 16.4
41859 434 96.9 85.9 11.0
41860 434 88.2 79.0 9.2
41861 434 80.4 65.1 15.3
41862 434 86.3 78.3 8.1
- 空きメモリ 2,036MB 当初3,542MB - 現在2,036MB = 減少メモリ1,506MB
- apache2の子プロセス100個の使用メモリ
SHARED約120MB + PRIVATE1,309MB = 1,439MB - Apache2の子プロセス一個の平均の使用メモリは約13MBです。
上記の通り減少メモリと子プロセスが使用しているメモリに大きな差異は無いようなので、メモリの実測方法に大きな問題はなさそうです。
実測を繰り返し適正なApache2.4の子プロセスのサイズを求めてください。