Это не полное решение, но может быть достаточно, чтобы развиться в один. Определенно существует точка, в которой существует процесс java
(и, следовательно, его можно контролировать с помощью pbind
), и в этот момент он еще не выполнил код для проверки процессора. Если вы можете приостановить запуск самого приложения до тех пор, пока pbind не выполнит свою работу, это должно быть ОК (предполагая, что идея pbind будет работать с точки зрения проверки процессора).
Один из способов сделать это, который должен определенно приостановить JVM в соответствующем месте, - это присоединение сокета для удаленных отладчиков и запуск с приостановленным режимом. Если передать следующие аргументы java
вызова:
-Xdebug -Xrunjdwp: транспортное = транспорт по сокетам, адрес = 8000, подвесьте = у, сервер = у
то JVM будет пауза после запуска java-процесс, но до выполнения основного класса, до тех пор, пока отладчик/агент не будет присоединен к порту 8000.
Так что, возможно, можно будет использовать скрипт-оболочку для запуска программы в фоновом режиме с этими параметрами, спящий режим для второй или около того, используйте pbind, чтобы установить количество процессоров в один для процесса java, затем ttach и отсоединить какой-либо агент до порта 8000 (этого будет достаточно, чтобы заставить Java продолжить выполнение).
Недостатки или потенциальные икоты в этой идее состоят в том, будет ли работать в режиме отладки существенно повлиять на производительность вашего приложения (как правило, это не имеет большого влияния в целом), можете ли вы контролировать какой-либо вид операции JDWP-агент из командной строки и сможете ли вы открывать порты на машине. Это не то, что я пытался автоматизировать раньше (хотя я использовал нечто похожее в ручном режиме, чтобы увеличить скорость Java-процесса, прежде чем позволить ему потерять), поэтому могут быть другие проблемы, которые я упустил.
Да, спасибо, но неудобно, что на самом деле не отвечает на мой вопрос. –