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