더 큰 규모로 확장하기 (200만+ 게시글, 월 8만+ 건)

지난 며칠간 전반적으로 순조롭게 진행되었지만, 오후에 약 30분 정도 예외가 있었습니다. 해당 시간에는 제가 서버에 직접 접속해 있지 않았지만, nginx 로그에서 백엔드 타임아웃이 보고되었습니다. sar 출력에서는 시스템 사용률이 약간 높은 것으로 보이지만, 전반적인 CPU 부하가 높은 것은 아닙니다. 정확히 무슨 일이 있었는지 모르겠지만, 그 시간 동안 unicorn/redis/postgres가 원활하게 작동하지 못했던 것으로 보입니다.

03:55:01 PM     all     34.99      1.87      6.67      0.12      0.00     56.35
04:05:01 PM     all     33.99      0.35      6.52      0.31      0.00     58.82
04:15:01 PM     all     35.24      1.17      7.14      0.13      0.00     56.31
04:25:02 PM     all     36.45      0.63      7.15      0.13      0.00     55.65
> 04:35:01 PM     all     39.09      0.71     16.78      0.11      0.00     43.32
> 04:45:01 PM     all     35.53      0.95     20.16      0.08      0.00     43.27
> 04:55:01 PM     all     41.64      4.29     15.44      0.24      0.00     38.39
05:05:01 PM     all     36.75      2.47      7.78      0.13      0.00     52.87
05:15:01 PM     all     35.96      1.29      7.81      0.10      0.00     54.85
05:25:01 PM     all     38.69      1.35      8.00      0.09      0.00     51.87
05:35:01 PM     all     37.01      4.53      7.92      0.07      0.00     50.46

위에서 >로 표시된 행들입니다.

해당 시간대에 높은 트래픽이 있었다는 것을 볼 수 없으므로, 무슨 일이었는지 전혀 감이 오지 않습니다. 하지만 실제로는 그 30분 동안에만 그런 현상이 발생했습니다.

전반적으로 CPU 시간을 살펴보면, Redis가 선두를 달리고 있으며 일반적으로 CPU의 상당 부분을 차지하고 있습니다. 이에 대해 할 수 있는 조치가 있는지 잘 모르겠습니다. 보통 20~25% 수준을 유지하다가 가끔 35%까지 치솟습니다.

1721566 uuidd      20   0 2035M 1458M  1952 S 16.1  4.6 16h22:37 /usr/bin/redis-server *:6379
1721578 www-data   20   0  108M 69100 12516 S  6.7  0.2  6h32:27 nginx: worker process
2853756 1000       20   0 1355M  444M 19356 R 63.7  1.4  2h38:10 unicorn worker[0] -E production -c config/unicorn.conf.rb
2854380 1000       20   0 1267M  409M 18768 S 41.6  1.3  2h19:45 unicorn worker[4] -E production -c config/unicorn.conf.rb
1721598 1000       20   0  592M  285M  5192 S  1.3  0.9  2h08:53 unicorn master -E production -c config/unicorn.conf.rb
    575 root       20   0 1747M 20468  5040 S  0.7  0.1  2h01:02 /usr/bin/containerd
2854731 1000       20   0 1280M  399M 17880 S 36.9  1.3  1h57:52 unicorn worker[7] -E production -c config/unicorn.conf.rb
1721841 1000       20   0  592M  285M  5192 S  0.7  0.9  1h49:49 unicorn master -E production -c config/unicorn.conf.rb
2855284 1000       20   0 1287M  425M 18396 S 18.8  1.4  1h35:02 unicorn worker[3] -E production -c config/unicorn.conf.rb
2856414 1000       20   0 1223M  391M 19268 S 13.4  1.2  1h14:50 unicorn worker[2] -E production -c config/unicorn.conf.rb
2856478 1000       20   0 1207M  401M 21120 S  5.4  1.3 58:42.50 unicorn worker[5] -E production -c config/unicorn.conf.rb
2856503 1000       20   0 1215M  389M 18980 S  4.7  1.2 47:22.95 unicorn worker[1] -E production -c config/unicorn.conf.rb
1721581 www-data   20   0 69888 28636 13368 S  0.0  0.1 44:49.50 nginx: worker process
2857467 1000       20   0 1199M  385M 18112 S  4.0  1.2 39:23.87 unicorn worker[6] -E production -c config/unicorn.conf.rb
1721594 _apt       20   0 8479M 20036 18128 S  1.3  0.1 32:55.29 postgres: 13/main: walwriter
    580 root       20   0 1747M 20468  5040 S  0.0  0.1 32:15.27 /usr/bin/containerd

장기 평균 로드는 현재 5로 안정화되었지만, 가끔 8~9까지 올라가는 것을 여전히 보고 있습니다.