To nie jest kompletne rozwiązanie, ale może wystarczyć do jego rozwinięcia. Z pewnością istnieje punkt, w którym istnieje proces java
(i tym samym można go kontrolować za pomocą pbind
) iw którym momencie jeszcze nie uruchomiono kodu, aby wykonać sprawdzenie procesora. Jeśli możesz wstrzymać uruchomienie samej aplikacji, dopóki pbind nie wykona swojej pracy, powinno to być OK (zakładając, że pomysł pbind będzie działał z punktu widzenia sprawdzania CPU).
Jednym ze sposobów na to, aby zdecydowanie zatrzymać maszynę JVM w odpowiednim miejscu, jest podłączenie do gniazda zdalnego debuggera i rozpoczęcie od trybu zawieszenia. Jeśli przechodzą następujące argumenty do java
inwokacji:
-Xdebug -Xrunjdwp: transport = dt_socket, adres = 8000, zawiesić = y, server = y
następnie JVM zostanie wstrzymane po rozpoczęciu proces java, ale przed wykonaniem głównej klasy, aż do przyłączenia debuggera/agenta do portu 8000.
Być może więc możliwe byłoby użycie skryptu otoki, aby uruchomić program w tle z tymi parametrami, uśpić drugi lub mniej, użyj pbind, aby ustawić liczbę procesorów na jeden dla procesu java, a następnie a ttach i odłączyć jakiegoś agenta do portu 8000 (co wystarczy, aby Java mogła kontynuować wykonywanie).
Wadami lub potencjalnymi problemami związanymi z tym pomysłem może być to, czy uruchamianie w trybie debugowania wpłynie znacząco na wydajność aplikacji (ogólnie nie ma to większego wpływu), niezależnie od tego, czy można kontrolować coś w rodzaju "no-op" Agent JDWP z wiersza poleceń i czy możesz otwierać porty na komputerze. To nie jest coś, co wcześniej próbowałem zautomatyzować (chociaż użyłem czegoś podobnego w sposób ręczny, aby zwiększyć luki w procesie Java, zanim go wypuszczę), więc mogą być inne problemy, które przeoczyłem.
Tak, dziękuję, ale niestety, to tak naprawdę nie odpowiada na moje pytanie. –