Questa non è una soluzione completa, ma potrebbe essere sufficiente per svilupparla. C'è sicuramente un punto in cui esiste il processo java
(e quindi può essere controllato da pbind
) ea quel punto non è ancora stato eseguito il codice per eseguire il controllo del processore. Se si potesse mettere in pausa il lancio dell'applicazione stessa fino a quando pbind non ha fatto il suo lavoro, questo dovrebbe essere OK (supponendo che l'idea di pbind funzioni dal punto di vista del controllo della CPU).
Un modo per eseguire questa operazione che dovrebbe sospendere definitivamente la JVM in un punto appropriato è il socket socket per i debugger remoti e l'avvio con la modalità suspend. Se si passa i seguenti argomenti al java
invocazione:
-Xdebug -Xrunjdwp: trasporti = dt_socket, indirizzo = 8000, sospendere = y, server = y
allora la JVM farà una pausa dopo l'avvio il processo java ma prima dell'esecuzione della classe principale, finché un debugger/agent non è collegato alla porta 8000.
Quindi forse sarebbe possibile utilizzare uno script wrapper per avviare il programma in background con questi parametri, per un in secondo luogo, utilizzare pbind per impostare il numero di processori su uno per il processo java, quindi a ttach e scollega qualche agente sulla porta 8000 (che sarà sufficiente per far sì che Java esegua l'esecuzione).
I difetti o potenziali intoppi in questa idea sarebbero se l'esecuzione in modalità di debug influenzi notevolmente le prestazioni della tua app (non sembra avere un grande impatto in generale), indipendentemente dal fatto che tu possa controllare un qualche tipo di no-op Agente JDWP dalla riga di comando e se è possibile aprire le porte sulla macchina. Non è qualcosa che ho provato ad automatizzare prima (anche se ho usato qualcosa di molto simile in modo manuale per aumentare lo nice
di un processo Java prima di lasciarlo libero), quindi potrebbero esserci altri problemi che ho trascurato.
fonte
2009-05-27 09:49:08
Sì, grazie, ma sfortunatamente non risponde alla mia domanda. –