Как загрузчик NiFi определяет, не запущен ли NiFi?

#apache-nifi

Вопрос:

Я вижу, что NiFi иногда перезапускается. В журнале nifi-app.log нет никаких указаний на ошибку. NiFi не обрабатывал никаких данных, и сервер в это время не был занят. Когда я вижу в файле nifi-bootstrap.log, я вижу, что

 2021-06-17 16:44:00,551 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:00,551 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.lock
2021-06-17 16:44:00,551 WARN  [main] org.apache.nifi.bootstrap.RunNiFi Apache NiFi appears to have died. Restarting...
2021-06-17 16:44:00,552 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:00,555 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Saved Pid 17260 to /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:00,555 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:00,557 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Saved Properties {pid=17260} to /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:00,557 INFO  [main] org.apache.nifi.bootstrap.Command Launched Apache NiFi with Process ID 17260
2021-06-17 16:44:00,558 INFO  [main] org.apache.nifi.bootstrap.RunNiFi Successfully started Apache NiFi with PID 17260
2021-06-17 16:44:01,128 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:01,128 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:01,131 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Saved Pid 17260 to /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:01,131 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
 

Мой вопрос в том, как процесс начальной загрузки определяет, что «НиФи, похоже, умер»? Ищет ли он существование файлов nifi.pid и nifi.status? Если да, то как часто он проверяет это? Это можно настроить?

Ответ №1:

согласно исходному коду, nifi-загрузка проверяет каждую секунду (не настраивается), работает ли основной процесс, проверяя, доступен ли код выхода процесса.

https://github.com/apache/nifi/blob/820b2cff29bf3a0d97399667264591b995cc9e45/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java#L1273

             while (true) {
                final boolean alive = isAlive(process);

                if (alive) {
                    try {
                        Thread.sleep(1000L);
                    } catch (final InterruptedException ie) {
                    }
                } else {
                    ... restart process ...
 

https://github.com/apache/nifi/blob/820b2cff29bf3a0d97399667264591b995cc9e45/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java#L1028

     public static boolean isAlive(final Process process) {
        try {
            process.exitValue();
            return false;
        } catch (final IllegalStateException | IllegalThreadStateException itse) {
            return true;
        }
    }

 

похоже, что ваш основной процесс nifi по какой — то причине останавливается… проверьте оперативную память, доступную на сервере, и -Xms amp; -Xmx параметры bootstrap.conf -обычно это основная причина.