Я успешно развернул Java-службу в дистрибутиве Linux на основе руководства here т. Е. Фактического простого файла ввода-вывода IO-кода и замечаю, что для такой простой программы большое использование ЦП. Возможно, из-за постоянной проверки потока ...Улучшение производительности, требуемое для JSVC Java Daemon
Я создал фактический JAR-файл на CentOS, используя NetBeans, а затем развернул его на ARM-дистрибутив Arch Linux, а затем использовал a) Java SE Embedded JVM (v7) и b) java-7-openjdk JVM.
Проблема в том, что использование ЦП постоянно колеблется от 80 до 95% от jsvc. Я бы не ожидал, что процессор достигнет этого максимума. В фактическом вызове jsvc я попытался добавить параметр -server для фонового процесса, но мне не удалось (я получаю). Пример для этого был бы полезен, поэтому мы могли бы исключить, является ли это отсутствующим параметром -server или нет.
Я думаю, что может быть что-то отсутствует кроме -Server вариант Я сказал, чтобы посмотреть на ScheduledExecutorService. - что может сделать улучшение возможно
Ваши мысли приветствуются -. Благодаря
Вы должны изменить свой подход, пытаясь найти ручку, которая может отключить использование ЦП, выяснить, что и почему использование ЦП является высоким. Это может быть так же просто, как и код с ошибкой, особый неэффективный внутренний цикл или просто медленный процессор. – nos
Спасибо за подсказку. Я не уверен, что находится под капотом jsvc, и я предоставил ссылку на фактический код демона. Я подозреваю, что поток постоянно проверяет файл на последний tick/tock перед добавлением другого (while (! Stop) {...} loop). Итак, (a) мне нужно проверить, если это так, и (б) любая небольшая оптимизация помогает - поэтому с точки зрения настройки, т. Е. Используемые JVM и фактические переданные параметры, такие как -сервер/-клиент или, возможно, размер кучи, должны иметь (даже если оно меньше). Исходя из вышесказанного, будут оценены мнения о наилучшей практике в отношении того, как это сделать должным образом. –
, если вы используете фактический код там, он содержит бесконечный цикл, который вращает процессор так быстро, как только может. Я бы сделал Thread.Sleep (1000); вызовите метод run(). – nos