프로세스에서 사용하는 대역폭을 어떻게 제한할 수 있나요?

프로세스에서 사용하는 대역폭을 어떻게 제한할 수 있나요?

매일 밤 파일을 백업하는 CentOS 5.7 서버가 있습니다. 백업이 네트워크를 통해 전송되는 동안 서버 호스트가 운영하는 다양한 사이트의 방문자가 성능 저하를 경험할까봐 걱정됩니다.

프로세스의 최대 허용 처리량을 네트워크 인터페이스로 제한하는 것이 가능합니까? SSH 기반 파일 전송을 사용 가능한 대역폭의 절반으로 제한하고 싶습니다. 이는 서버 측이나 클라이언트 측에 있을 수 있습니다. 즉, 연결을 시작하는 클라이언트나 연결을 수신하는 서버에서 이 작업을 수행할 수 있습니다.

(안타깝게도 백업 전용 인터페이스를 추가할 수는 없습니다. 사용 가능한 처리량을 늘릴 수는 있지만 이는 네트워크 전송이 더 빨리 완료되지만 수행하는 동안 연결의 총 용량은 여전히 ​​최대화된다는 의미일 뿐입니다.)


일부 배경

아마도 배경이 적절할 것입니다. 한발 물러서서 백업 자체를 생성할 로컬 공간이 충분하지 않은 문제가 있었습니다. SSHFS를 입력하세요! 백업은 표면적으로는 로컬 드라이브에 저장되므로 웹 서버 자체에는 백업 비트가 없습니다.

그것이 왜 중요합니까? 왜냐하면 그것은 유서 깊은 rsync --bwlimit. rsync실제로 전송을 수행하지도 않으며~할 수 있다백업 파일을 저장할 공간조차 여유가 없기 때문입니다.

"그럼 왜 백업 파일을 만들어야 합니까? rsync소스 파일과 폴더만 만들면 안 되나요?" 라고 묻는 것을 들을 수 있습니다. 왜냐면 "Plesk"라는 짜증나는 일이 섞여있으니까! 이는 편의를 위해 Plesk를 사용하는 클라이언트 지향 웹 호스트입니다. 따라서 Plesk는 복원 절차 중에 백업을 매우 안전하게 사용할 수 있도록 백업에 모든 종류의 추가 마법을 추가하기 때문에 Plesk를 사용하여 백업을 시작합니다.

슬픈 얼굴

답변1

방금 발견한 옵션 중 하나는trickle.

trickle휴대용 경량 사용자 공간 대역폭 셰이퍼입니다. 협업 모드( 와 함께 trickled) 또는 독립 실행형 모드에서 실행할 수 있습니다.

trickleUnix 로더 사전 로드를 활용하여 작동합니다. 기본적으로 이는 소켓을 통해 데이터를 보내고 받는 데 필요한 새로운 버전의 기능을 애플리케이션에 제공합니다. 그런 다음 소켓을 통한 데이터 전송 및 수신 지연을 기반으로 트래픽을 제한합니다. trickle전적으로 사용자 공간에서 실행되며 루트 권한이 필요하지 않습니다.

Ubuntu 사용자의 경우 다음을 실행하여 설치하십시오.

sudo apt install trickle

예를 들어 maven build다운로드 속도를 20kB/s, 업로드 속도를 111kB/s로 제한하면서 실행해 보세요.

trickle -sd 20 -u 111 mvn build

답변2

iptables패킷을 표시하는 데 사용할 수 있으며 (--pid-owner ...) tc트래픽을 형성하는 데 사용할 수 있습니다. 또한 "--sid-owner"를 사용하여 해당 프로세스의 스레드와 하위 항목을 포함할 수 있습니다.

http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

성냥 --pid-소유자
핵심2.3, 2.4, 2.5, 2.6
iptables -A OUTPUT -m 소유자 --pid-owner 78
설명 이 일치는 해당 패킷을 담당하는 프로세스 ID(PID)를 기반으로 패킷을 일치시키는 데 사용됩니다. 이 일치는 사용하기가 조금 더 어렵지만 한 가지 예는 PID 94가 HTTP 포트에서 패킷을 보내도록 허용하는 것입니다(물론 HTTP 프로세스가 스레드되지 않은 경우). 또는 특정 데몬에 대한 ps 출력에서 ​​PID를 가져온 다음 이에 대한 규칙을 추가하는 작은 스크립트를 작성할 수 있습니다. 예를 들어, Pid-owner.txt 예에 표시된 것과 같은 규칙이 있을 수 있습니다.

답변3

파이프(또는 stdout)에 쓸 수 있으면 pv(파이프 뷰어) 명령을 설치할 수 있습니다. 원래는 파이프를 통해 전송된 데이터의 진행 상황을 표시하기 위해 작성되었습니다.

tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs

   -L RATE, --rate-limit RATE
          Limit the transfer to a maximum of RATE  bytes  per  second.   A
          suffix of "k", "m", "g", or "t" can be added to denote kilobytes
          (*1024), megabytes, and so on.

답변4

데이터를 어떻게 전송하고 있나요? (ssh를 통한 rsync? scp? sftp? 다른 것?)

rsync를 사용하면 대역폭을 제한할 수 있습니다(--bwlimit=KBPS 옵션 참조). rsync -e ssh --bwlimit ..

또는 멋진 속도 제한을 수행하기 위해 qdisc 또는 이에 상응하는 장치를 설정할 수 있지만 귀하의 경우에는 이것이 심각한 과잉이 될 것이라고 생각됩니다. 이에 대한 문서는 다음에서 확인할 수 있습니다.Linux 고급 라우팅 및 트래픽 제어 HOWTO

관련 정보