우리의 일반적인 임무는 du
여러 하위 디렉터리를 요약하고, 최악의 위반자를 식별하고, 그 결과를 사용하여 빠르게 증가하는 콘텐츠를 찾아 잠재적인 문제를 찾아내는 것입니다. 우리는 diff
이를 비교하기 위해 스냅샷을 사용합니다.
각각 수십 또는 수천 개의 파일(또는 그 이상)을 포함할 수 있는 여러(수백) 개의 하위 디렉터리가 있는 최상위 디렉터리를 갖습니다.
이 경우 " du -s
"은(는) 매우 심각한 IO 공격을 일으킬 수 있으며, 이로 인해 서버가 캐시를 포기하게 되고 이로 인해 막대한 IO 스파이크가 발생하게 되는데 이는 매우 달갑지 않은 부작용입니다.
원치 않는 부작용 없이 동일한 데이터를 얻으려면 어떤 전략을 사용할 수 있습니까?
답변1
보세요 ionice
. ~에서man ionice
:
이 프로그램은 프로그램의 io 스케줄링 범주와 우선순위를 설정하거나 가져옵니다. 인수가 제공되지 않거나 -p만 제공되면 ionice는 현재 io 스케줄링 클래스와 프로세스의 우선순위를 쿼리합니다.
"유휴" 입출력 클래스(사용 가능한 가장 낮은 우선순위)를 사용하여 실행하려면 du
다음을 수행할 수 있습니다.
ionice -c 3 du -s
du
이렇게 하면 I/O가 다른 프로세스를 방해하는 것을 방지할 수 있습니다 . 다음과 같이 프로그램을 다시 조정하여 CPU 우선 순위를 낮추는 것을 고려할 수도 있습니다.
renice -n 19 "$duPid"
초기화 중에 두 가지를 모두 수행할 수도 있습니다.
nice -n 19 ionice -c 3 du
답변2
많은 파일 시스템이 단일 디렉터리의 큰 파일 트리를 제대로 처리하지 못하기 때문에 단일 디렉터리에 많은 수의 파일이 있는 경우 이로 인해 I/O 스파이크가 발생할 수 있습니다. 더 많은 하위 디렉터리로 분할하면 도움이 될 수 있습니다. 단일 디렉터리에 10,000개 이상의 파일이 있고 이로 인해 문제가 발생하는 경우 이를 분할해야 할 수 있습니다.
디스크 사용량 추적에 관해서는 먼저 살펴보고 df
거기의 사용량 값이 빠르게 상승하지 않으면 하위 디렉터리도 빠르게 상승하지 않으면 du
완전히 건너뛸 수 있습니다.
또 다른 옵션은 파일 시스템이 지원하는 경우 사용량을 추적하는 디스크 할당량 시스템일 수 있습니다.
답변3
또는 ionice
디스크 액세스를 보다 효율적으로 만들 수 있습니다. 이것은 실행하여 시도할 수 있습니다.
find /du/root -printf ""
find /du/root -perm 777 -printf ""
첫 번째(아마도 ionice
통해). 파일이 너무 많으면 작동하지 않습니다. 너무 많은 양은 사용 가능한 RAM의 양에 따라 다릅니다.