# base2 サーバの評価 - 30minの再起動の際の遅延などが確認されており、改善をしたい。 - できればbase2のサーバの最適化をする。 - Apacheでのチューニングを採用。 ## 現状の把握 [top commnd](https://sys-guard.com/post-6318/)による解析 > 常に1以上だったならチューニングの必要性あり! - ↓の状況からload averageは大体1.5~2くらいを推移していることが確認できる。 全く重大なボトルネックとは言えない。 - 8番目の値がプロセスの状態を表しており、基本的にはS(スリープの状態)プロセスになっている。 - Rが継続的に使用率が高い場合にはCPUがボトルネックということになるので、この場合はこの限りではない。 ``` top - 11:42:11 up 55 days, 2:41, 4 users, load average: 1.44, 1.55, 1.62 Tasks: 383 total, 3 running, 229 sleeping, 0 stopped, 0 zombie Cpu(s): 7.5%us, 0.2%sy, 0.0%ni, 92.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 130520980k total, 22193768k used, 108327212k free, 543544k buffers Swap: 0k total, 0k used, 0k free, 8005544k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 23713 ec2-user 20 0 612m 277m 13m R 100.0 0.2 0:09.82 bundle 23714 ec2-user 20 0 612m 277m 13m R 99.7 0.2 0:09.82 bundle 21783 ec2-user 20 0 1237m 809m 12m S 16.9 0.6 1:01.69 ruby 21834 ec2-user 20 0 1427m 989m 11m S 12.3 0.8 0:53.49 ruby 21879 ec2-user 20 0 1111m 696m 11m S 10.3 0.5 0:37.80 ruby 21430 root 39 19 5921m 29m 15m S 3.3 0.0 0:09.26 PassengerAgent 21926 ec2-user 20 0 1174m 755m 11m S 2.3 0.6 0:30.18 ruby 21971 ec2-user 20 0 975m 576m 10m S 1.3 0.5 0:13.12 ruby 8 root 20 0 0 0 0 I 0.3 0.0 10:32.21 rcu_sched 1 root 20 0 19688 2580 2248 S 0.0 0.0 0:06.20 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.51 kthreadd ``` #### ロードアベレージの解析 - ロードアベレージはチューニングの必要性はあるが重大なボトルネックとはないえない。 CPUのプロセス不足 I/O負荷のボトルネックではないと判断できると思う。 ``` 09時00分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 09時10分01秒 16 616 0.65 1.04 1.18 09時20分01秒 17 636 0.71 1.11 1.23 09時30分01秒 18 618 0.50 0.96 1.16 09時40分01秒 18 660 0.67 1.20 1.30 09時50分01秒 17 619 0.44 0.84 1.12 10時00分01秒 32 672 0.44 0.78 1.04 10時10分01秒 17 619 0.76 1.13 1.30 10時20分01秒 18 642 1.78 1.57 1.47 10時30分01秒 17 644 1.06 1.30 1.43 10時40分01秒 18 655 0.74 1.45 1.57 10時50分01秒 17 625 0.54 1.07 1.40 11時00分01秒 26 663 0.51 1.00 1.33 11時10分01秒 18 634 0.58 1.24 1.49 11時20分01秒 19 644 1.70 1.64 1.59 11時30分01秒 18 651 0.75 1.33 1.59 11時40分01秒 16 670 0.54 1.13 1.49 11時50分01秒 17 646 0.92 1.16 1.40 12時00分01秒 27 677 0.64 1.13 1.38 12時10分01秒 20 655 1.11 1.43 1.61 ``` --- #### vmstatコマンド - CPUの空き具合の割合90%を超えることがほとんどである。(CPUのボトルネックは基本的になさそう) - こちらを確認してもわかるように、特定のCPUに処理がよっている。適切に処理の分散ができていないと言うことが言える。(アプリケーション、ミドルウェアが適切ではない。) ``` procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 108144672 543544 8007724 0 0 0 1 0 0 4 0 96 0 0 1 0 0 108087888 543544 8007724 0 0 0 0 307 42 3 0 97 0 0 2 0 0 108032080 543544 8007724 0 0 0 0 787 297 4 0 96 0 0 1 0 0 108027960 543544 8007732 0 0 0 0 1574 604 4 0 95 0 0 3 0 0 107984000 543544 8007732 0 0 0 0 1201 420 4 0 96 0 0 3 0 0 107766136 543544 8007736 0 0 0 0 1775 925 9 1 90 0 0 4 0 0 107619632 543544 8007748 0 0 0 24 3329 1499 10 1 90 0 0 3 0 0 107488752 543544 8007748 0 0 0 0 3982 1937 9 0 91 0 0 3 0 0 107384800 543544 8007748 0 0 0 60 3470 1543 9 1 90 0 0 3 0 0 107304248 543544 8007752 0 0 0 0 2290 750 9 1 90 0 0 ``` --- #### mpstat - 先ほどはCPUの平均を取得していたので、それぞれのCPUの状態を取得してみる。 - 32CPUのうちにidle率が100%のCPUが多く存在している。 ``` ec2-user@ip-172-31-17-174:~$ mpstat -P ALL 1 Linux 4.14.88-72.73.amzn1.x86_64 (ip-172-31-17-174) 2021年08月11日 _x86_64_ (32 CPU) 11時51分39秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 11時51分40秒 all 11.11 0.00 1.38 0.00 0.00 0.00 0.00 0.00 87.52 11時51分40秒 0 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00 11時51分40秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 3 52.53 0.00 0.00 0.00 0.00 0.00 0.00 0.00 47.47 11時51分40秒 4 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 97.03 11時51分40秒 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 7 0.00 0.00 14.14 0.00 0.00 0.00 0.00 0.00 85.86 11時51分40秒 8 0.00 0.00 1.01 0.00 0.00 0.00 0.00 0.00 98.99 11時51分40秒 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 11 11.11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 88.89 11時51分40秒 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 16 4.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 96.00 11時51分40秒 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 18 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00 11時51分40秒 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 21 88.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 8.00 11時51分40秒 22 38.38 0.00 1.01 0.00 0.00 0.00 0.00 0.00 60.61 11時51分40秒 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 26 3.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00 11時51分40秒 27 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11時51分40秒 28 79.21 0.00 20.79 0.00 0.00 0.00 0.00 0.00 0.00 11時51分40秒 29 70.59 0.00 2.94 0.00 0.00 0.00 0.00 0.00 26.47 11時51分40秒 30 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.01 11時51分40秒 31 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00 ``` --- #### メモリに関して、 - メモリの空きが大きく存在する。十分にスレッドを立ててアプリケーションを動かすことは可能。 - キャッシュやバッファもほとんどメモリを使用していないので、プロセスに割り当てられるメモリが大幅に余っている。 ``` ec2-user@ip-172-31-17-174:~$ free -g total used free shared buffers cached Mem: 124 25 99 0 0 7 ``` #### ストレージ - IO数(IOPS)を見ても負荷は軽微。 ``` 2021年08月11日 12時02分04秒 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util nvme2n1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 nvme1n1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 nvme0n1 0.00 11.00 0.00 2.00 0.00 0.05 52.00 0.00 2.00 0.00 0.00 ``` --- #### ネットワーク ``` Tcp: 3568279 active connections openings 9816693 passive connection openings 74901 failed connection attempts 132572 connection resets received 25 connections established 862247707 segments received 1348215394 segments send out 6343788 segments retransmited 22627 bad segments received. 1383774 resets sent InCsumErrors: 22516 ``` ## まとめ loadアベレージやCPUが余っていることからApachのチューニングの必要性はあるが、重大なボトルネックは見受けられなかった。サーバ自体はオーバースペックであり、Apacheが最適にプロセスの管理ができているわけではなさそうです。 特定の処理でエラーが出る問題は、再起動時にはペインディングが発生するのは確かに考えられるが、特定の時間での処理でない場合にはペインディング時と被らなければ処理が通るはずなので別の問題があるのではないかと思います。 ## 追記8/17 base2のApacheのチューニングを行なっていく。 現状: 基本的には以前に設定した、bapi_customerサーバと同じ。ディレクトリなど。 ``` ec2-user@ip-172-31-17-174:/etc/httpd/conf$ ls httpd.conf magic rails.conf ssl/ ``` httpd.confに設定をしていく。 ## 設定内容。 以前の設定内容 ``` StartServers 200 MinSpareServers 200 MaxSpareServers 200 ServerLimit 550 MaxClients 500 PassengerMaxPoolSize 500 PassengerUseGlobalQueue on ``` - TCPsessionの待機を変更する。デフォルトは15秒。 15秒もコネクションを維持する必要はない。 keepAliveTimeout 3 PassengerMaxPoolSize 15 最終的 ``` StartServers 100 MinSpareServers 200 MaxSpareServers 200 ServerLimit 550 MaxClients 500 ```