NFS 서버는 유휴 상태에서도 높은 부하를 발생시킵니다.

NFS 서버는 유휴 상태에서도 높은 부하를 발생시킵니다.

아무것도 실행되지 않는 경우에도 로드가 10보다 큰 Ubuntu(12.04) NFS 서버가 있습니다.

특히 스토리지는 5개의 논리 볼륨(LVM)과 일부 ext4 파티션이 있는 iSCSI 장치를 통해 제공됩니다. 모든 서비스가 중지되고 내보내기가 없더라도(즉, 클라이언트 트래픽 없음) 로드는 10입니다. iostat를 실행하면 하나의 특정 매핑된 장치(/dev/dm-1)가 항상 기록되는 것을 볼 수 있습니다(출력을 올바르게 해석한 경우).

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda               0.00         0.00         0.00          0          0
sdb             342.00         0.00         9.21          0          9
dm-0              0.00         0.00         0.00          0          0
dm-1            615.00         0.00        11.71          0         11

(sdb는 iSCSI 장치가 나타나는 위치이고, dm-n은 각 논리 볼륨입니다). 저는 실제로 실행 중인 다른 모든 서비스를 (거의) 모두 중지했는데, NFS 서버를 시작하면 로드가 올라가고, 중지하면 로드가 줄어든다고 자신 있게 말할 수 있습니다. 무슨 일이야? 디스크에 기록되는 내용을 어떻게 확인할 수 있나요? (lsof를 시도했지만 프로세스가 표시되지 않았습니다).

추가하다필요에 따라 정보를 추가합니다.

가동 시간설명하다:

18:27:15 up 1 day,  9:59,  2 users,  load average: 14.22, 12.42, 11.55

가상 머신 상태설명하다:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  1    960 865924  51604 23204424    0    0    43     4    7   20  0  2 86 12

통계자료설명하다:

Linux 3.2.0-26-generic-pae (leitrim)    12/25/2012  _i686_  (8 CPU)

06:33:53 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
06:33:53 PM  all    0.08    0.04    0.96   11.62    0.00    0.88    0.00    0.00   86.43

dstat -cdD sdb -ng 60 3

----total-cpu-usage---- --dsk/sdb-- -net/total- ---paging--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out 
  0   1  86  12   0   1| 324k 8729k|   0     0 |   1B    8B
  0   1  87  12   0   1|  17k 8953k|8064k 9652k|   0     0 
  0   1  86  12   0   1|1229B 9081k|8010k 9796k|   0    68B
  0   1  89  10   0   1|3209B 8364k|7703k 9014k|   0     0 

RPC 정보

  program version netid     address                service    owner
    100000    4    tcp6      ::.0.111               portmapper superuser
    100000    3    tcp6      ::.0.111               portmapper superuser
    100000    4    udp6      ::.0.111               portmapper superuser
    100000    3    udp6      ::.0.111               portmapper superuser
    100000    4    tcp       0.0.0.0.0.111          portmapper superuser
    100000    3    tcp       0.0.0.0.0.111          portmapper superuser
    100000    2    tcp       0.0.0.0.0.111          portmapper superuser
    100000    4    udp       0.0.0.0.0.111          portmapper superuser
    100000    3    udp       0.0.0.0.0.111          portmapper superuser
    100000    2    udp       0.0.0.0.0.111          portmapper superuser
    100000    4    local     /run/rpcbind.sock      portmapper superuser
    100000    3    local     /run/rpcbind.sock      portmapper superuser
    100024    1    udp       0.0.0.0.172.13         status     116
    100024    1    tcp       0.0.0.0.229.210        status     116
    100024    1    udp6      ::.137.98              status     116
    100024    1    tcp6      ::.175.197             status     116
    100021    1    udp       0.0.0.0.171.56         nlockmgr   superuser
    100021    3    udp       0.0.0.0.171.56         nlockmgr   superuser
    100021    4    udp       0.0.0.0.171.56         nlockmgr   superuser
    100021    1    tcp       0.0.0.0.153.54         nlockmgr   superuser
    100021    3    tcp       0.0.0.0.153.54         nlockmgr   superuser
    100021    4    tcp       0.0.0.0.153.54         nlockmgr   superuser
    100021    1    udp6      ::.206.206             nlockmgr   superuser
    100021    3    udp6      ::.206.206             nlockmgr   superuser
    100021    4    udp6      ::.206.206             nlockmgr   superuser
    100021    1    tcp6      ::.132.23              nlockmgr   superuser
    100021    3    tcp6      ::.132.23              nlockmgr   superuser
    100021    4    tcp6      ::.132.23              nlockmgr   superuser
    100003    2    tcp       0.0.0.0.8.1            nfs        superuser
    100003    3    tcp       0.0.0.0.8.1            nfs        superuser
    100227    2    tcp       0.0.0.0.8.1            -          superuser
    100227    3    tcp       0.0.0.0.8.1            -          superuser
    100003    2    udp       0.0.0.0.8.1            nfs        superuser
    100003    3    udp       0.0.0.0.8.1            nfs        superuser
    100227    2    udp       0.0.0.0.8.1            -          superuser
    100227    3    udp       0.0.0.0.8.1            -          superuser
    100003    2    tcp6      ::.8.1                 nfs        superuser
    100003    3    tcp6      ::.8.1                 nfs        superuser
    100227    2    tcp6      ::.8.1                 -          superuser
    100227    3    tcp6      ::.8.1                 -          superuser
    100003    2    udp6      ::.8.1                 nfs        superuser
    100003    3    udp6      ::.8.1                 nfs        superuser
    100227    2    udp6      ::.8.1                 -          superuser
    100227    3    udp6      ::.8.1                 -          superuser
    100005    1    udp       0.0.0.0.154.132        mountd     superuser
    100005    1    tcp       0.0.0.0.217.173        mountd     superuser
    100005    1    udp6      ::.165.76              mountd     superuser
    100005    1    tcp6      ::.141.19              mountd     superuser
    100005    2    udp       0.0.0.0.183.55         mountd     superuser
    100005    2    tcp       0.0.0.0.214.84         mountd     superuser
    100005    2    udp6      ::.233.222             mountd     superuser
    100005    2    tcp6      ::.211.16              mountd     superuser
    100005    3    udp       0.0.0.0.188.56         mountd     superuser
    100005    3    tcp       0.0.0.0.158.62         mountd     superuser
    100005    3    udp6      ::.152.158             mountd     superuser
    100005    3    tcp6      ::.201.200             mountd     superuser

답변1

좀 더 조사한 후에는 내 질문에 적어도 부분적으로 대답할 수 있습니다.

  1. NFS 클라이언트 중 하나에서 미친 듯이 실행 중인 프로세스로 인해 장치 중 하나에 대한 쓰기가 발생했습니다. 한 번에 하나의 클라이언트를 닫음으로써 이를 달성합니다. 어떤 클라이언트가 NFS 서버에 쓰고 있는지 확인하는 명령이 있으면 좋겠지만 클라이언트가 있으면 찾을 수 없습니다.

관련 정보