프로세스에서 사용하는 대역폭을 제한하는 방법은 무엇입니까?

프로세스에서 사용하는 대역폭을 제한하는 방법은 무엇입니까?

매일 밤 파일을 백업하는 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.frozenux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

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

답변3

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

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 고급 라우팅 및 트래픽 제어 방법

관련 정보