2012-04-16 6 views
8

Esiste un modo efficace per limitare la larghezza di banda di un determinato processo Java?limitazione della larghezza di banda della rete di un processo java

mi è familiare con soluzioni come trickle di limitare la larghezza di banda di un certo processo in fase di esecuzione

sudo trickle -s -d 1024 /path/to/app.sh 

Ma quando si tratta di java elabora lo rende più di una sfida perché l'applicazione avvia una JVM o in qualche si tratta di un servizio WRAPPER che avvia un JVM - ciò significa che soluzioni come "trickle" non funzioneranno.

Posso provare a limitare (utilizzando trickle) l'intero processo java (eseguendo il wrapping/messing con /usr/bin/java s.link) - UGLY. Qualcuno sa di una soluzione migliore per limitare la larghezza di banda di un processo java (JVM)?

Grazie!

+2

Controlla se questo è utile http://stackoverflow.com/questions/3246345/making-a-reliable-web-service-unreliable-but-in-a-controlled-way/3247133#3247133 – Kennet

risposta

3

Sfortunatamente non penso che il trickle possa farlo. Ho un problema simile e l'ho risolto tramite la limitazione della larghezza di banda su una particolare porta. Ad esempio, l'applicazione apre la porta 34567 per comunicare, quindi è possibile applicare le impostazioni del firewall e ridurlo.

su un Mac Sto usando "ipfw", ad esempio:

sudo ipfw pipe 1 config bw 5KByte/s 
sudo ipfw add 2 pipe 1 src-port 6666 

su Linux sto usando "tc", esempi & fonte: http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/

come soluzione finale, è possibile creare bash script che monitora i processi e seleziona quelli che ti servono e getta il throttling su di esso.

0

La domanda non è chiara. Hai il controllo del codice Java? Altrimenti, sei l'amministratore di sistema?

Se si utilizza un codice di Java è possibile utilizzare il paradigma Socket e quindi limitare ogni connessione socket utilizzando il seguente metodo: setPerformancePreferences (int connectionTime, latenza int, int larghezza di banda). Nell'altro caso, la capacità di limitazione dell'ampiezza di banda dipende dal sistema operativo e dal modo in cui vengono eseguite le applicazioni Java.