이미 시작된 프로세스의 네트워크 처리량 제한? (리눅스 / FreeBSD)


10

프로세스가 시작된 후 프로세스의 네트워크 처리량을 제한하는 유틸리티가 있습니까? 간단한 예 : 사용자는 scp를 사용하여 모든 업로드 대역폭을 사용하며 전송 속도를 제한하거나 전송 우선 순위를 낮추고 싶습니다.

나는 그것을 달성하기 위해 iptables / tc 또는 pf의 조합을 사용할 수 있다고 생각하지만 "one-shot"도구가 있는지 궁금합니다.


"트리클"을 의미 했습니까?
halp

편집 : "트리클"의도 된 것으로 가정했습니다.
Steven 월요일

답변:


3

불행히도 FreeBSD에는 그러한 해결책이 없습니다. dummynet / ipfw 또는 altq / pf와 같은 많은 솔루션이 있지만 다른 패턴을 기반으로 네트워크 사용량을 제한하는 데 사용되지만 pid는 아닙니다.

리눅스에는 사용자별로 네트워크 사용을 제한하는 방법이 있습니다 :

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

pid를 기반으로 네트워크 사용률을 제한하는 솔루션이 없다고 생각합니다.


2
FreeBSD의 ipfw는 uid로 트래픽을 일치시킬 수 있습니다
gelraen


0

은 "--pid 소유자"옵션이 "소유자"의 iptables 모듈에서 포기 된 이후 리눅스에서 iptables에와 TC의 경우에도 조합 (아래 표 참고를 참조 어려운 문제가 될 수 여기 ). 실제로이 연관 (패킷-프로세스) 만 복잡해 보이지만 나머지는 쉽게 수행 할 수 있습니다 (예 : 패킷 필터링 및 제한).


0

나는 이것에 대한 준비된 해결책이 없다고 생각한다. 그러나 표준 Linux 도구를 사용하면 작업을 수행하는 스크립트를 해킹 할 수 있습니다.

먼저 lsof를 사용하여 특정 프로세스의 모든 연결 목록을 얻을 수 있습니다. 그런 다음 해당 연결에 대해 tc를 사용하여 수신 정책을 만들 수 있습니다.


0

결정적으로 프로세스를 +20으로 낮추면 시스템에서 실행되는 다른 작업의 우선 순위가 높아지고 작업이 덜 자주 예약되므로 버퍼 또는 프로세스 패킷을 채우기가 더 어려워 TCP가 발생합니다. 조절. 산발적이지만 충분히 도움이 될 수 있습니다.

# renice 20 -p $pid

1
이것은 대역폭을 제어하는 ​​매우 간단한 방법이며 시스템이 너무 많이로드 된 경우에만 실제로 작동합니다. 유휴 시스템 에반에서 -20으로 처리 된 프로세스는 여전히 원하는만큼 CPU에 도달합니다.
voretaq7

맞습니다. 그러나 이것이 다른 로컬 컴퓨터와 대역폭을 공유하지 않으면 컴퓨터가 유휴 상태 인 경우이 프로세스가 모든 대역폭을 가져 오는지 대부분 신경 쓰지 않습니다. 중요한 대역폭을 사용하려는 다른 프로세스가있을 때만 가능합니다. "매우 많이로드 된"이라는 다른 정의가있을 수 있습니다. 실행하려고하는 다른 프로세스가있는 경우 우선 순위를 가지므로로드 평균이 코어 당 1보다 크거나 같으면 도움이 될 수 있습니다. 나는 그것이 조잡하다는 것을 알았지 만 그것이 유일하게 사용할 수있는 도구 (FreeBSD)라면 적어도 가치가 있습니다.
Phil P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.