Nginx 디스크 IO 문제

Nginx 디스크 IO 문제

저는 소규모 비디오 스트리밍 사이트를 운영하고 있는데 내 사이트의 비디오에서 몇 가지 문제를 발견했습니다.

맨 위

top - 15:43:48 up 34 days,  1:22,  1 user,  load average: 37.80, 38.08, 38.38
Tasks: 184 total,   1 running, 183 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.5 sy,  0.0 ni,  6.0 id, 85.1 wa,  0.0 hi,  7.8 si,  0.0 st
KiB Mem : 32730324 total,  1575916 free,  1470200 used, 29684208 buff/cache
KiB Swap: 33313788 total, 33308768 free,     5020 used. 30448240 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    3 root      20   0       0      0      0 S  16.9  0.0   5554:20 ksoftirqd/0
 2827 www-data  20   0  398696  84756   5548 S   6.0  0.3 213:14.78 nginx
 2828 www-data  20   0  324716  10900   5548 S   1.7  0.0  14:46.99 nginx
   40 root      20   0       0      0      0 S   0.3  0.0 148:03.47 ksoftirqd/5
  198 root       0 -20       0      0      0 S   0.3  0.0  11:16.66 kworker/0:+
 1086 root      20   0   44044   3668   2988 R   0.3  0.0   0:00.21 top
 2829 www-data  20   0  319180   6660   5396 S   0.3  0.0   1:51.37 nginx
27962 root      20   0  109956   9704   7836 S   0.3  0.0   0:00.53 exim4
    1 root      20   0  204648   5072   3644 S   0.0  0.0   1:47.36 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.16 kthreadd
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
    7 root      20   0       0      0      0 S   0.0  0.0  31:06.23 rcu_sched
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      rt   0       0      0      0 S   0.0  0.0   0:01.11 migration/0
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-dr+
   11 root      rt   0       0      0      0 S   0.0  0.0   1:16.83 watchdog/0
   12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/0

알토

Total DISK READ :      59.96 M/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:      59.96 M/s | Actual DISK WRITE:       8.84 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 2902 be/4 www-data  377.17 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2845 be/4 www-data 1508.66 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2864 be/4 www-data  754.33 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2832 be/4 www-data 1005.78 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2888 be/4 www-data  754.33 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2883 be/4 www-data  848.62 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2836 be/4 www-data 1382.94 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2849 be/4 www-data  628.61 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2841 be/4 www-data  660.04 K/s    0.00 B/s  0.00 %  99.58 % nginx: wo~er process
 2853 be/4 www-data  880.05 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2831 be/4 www-data  754.33 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2859 be/4 www-data 1382.94 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2835 be/4 www-data 1005.78 K/s    0.00 B/s  0.00 %  99.87 % nginx: wo~er process
 2851 be/4 www-data  628.61 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2834 be/4 www-data  754.33 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2839 be/4 www-data  880.05 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2860 be/4 www-data  251.44 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2892 be/4 www-data  628.61 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2843 be/4 www-data  880.05 K/s    0.00 B/s  0.00 %  99.99 % nginx: wo~er process
 2833 be/4 www-data  377.17 K/s    0.00 B/s  0.00 %  99.97 % nginx: wo~er process
 2856 be/4 www-data  754.33 K/s    0.00 B/s  0.00 %  99.97 % nginx: wo~er process

내 사이트를 중지하고 디스크 속도를 실행해 보면 이것이 나타납니다.

# dd if=/dev/zero of=tempfile bs=10M count=1024 conv=fdatasync,notrunc status=progress
10622074880 bytes (11 GB, 9.9 GiB) copied, 46.0385 s, 231 MB/s
1024+0 records in
1024+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 92.1228 s, 117 MB/s

따라서 현재 속도를 120MB/s로 높일 수 있으며 iotop에서는 60MB/s에 도달할 수 있다고 보고합니다. 절반 속도만 사용하면 왜 높은 로드 IO 문제가 발생합니까?

이 문제를 어떻게 조정하거나 해결할 수 있습니까? 저는 mp4 비디오를 제공하기 위해 nginx를 사용하고 있습니다.

답변1

SSD가 처음 나왔을 때 SSD가 항상 HDD보다 빠르다는 일반적인 오해가 있었습니다. 이는 단순히 사실이 아닙니다. HDD 시대에도 쉽게 125MB/s 이상에 도달할 수 있었지만 유일한 요구 사항은순서대로읽기 또는 쓰기. 이에 비해 원시 SSD에 대한 순차 쓰기는 일반적으로 이보다 느리고 읽기 속도도 그다지 인상적이지 않은 경우가 많습니다.

간단히 말해서: 당신의DDnginx가 무작위 액세스를 사용하는 동안 순차 처리량을 테스트합니다. HDD는 무작위 검색 작업을 위한 용량이 매우 제한되어 있으며 모든 세대의 7.2k RPM 드라이브에 대해 초당 100회 미만의 작업을 수행합니다.(10,000+에 비해IOPS최신 SSD에서) 작업이 임의 파일 시스템 액세스에 의존하는 경우 전체 처리량이 크게 제한될 수 있습니다. 오늘날 100 IOPS는 너무 느립니다. 따라서 HDD가 오늘 "발명"되었다면 현실과 동떨어진 것으로 무시될 것입니다.

다른 웹 애플리케이션보다 순차적 대용량 파일 액세스가 더 일반적인 비디오를 제공하고 있기 때문에 실제 처리량 수치는 더 이상 나쁘지 않습니다. 순차 벤치마크에서 117MB/s가 표시될 때 실제 처리량은 59.96MB/s입니다. 벌써 꽤 인상적이네요. 해결책은 더 많은 HDD로 업그레이드하거나, 더 많은 IOPS를 위해 더 빠른 RPM의 HDD를 사용하거나, SSD로 마이그레이션하는 것일 수 있습니다.

관련 정보