Я постоянно наблюдаю за процессом с помощью команды pgrep и отправляю прерывания на другую машину с помощью snmp4j.
Это мой код для мониторинга процесса:
String[] process = new String[] {"/bin/sh", "-c","pgrep httpd" };
Process proc = new ProcessBuilder(process).start();
InputStreamReader input = new InputStreamReader(proc.getInputStream());
BufferedReader reader = new BufferedReader(input);
String line = reader.readLine();
int rc = proc.waitFor();
reader.close();
input.close();
Я ограничиваю количество ловушек, отправляемых на машину с помощью iptables, но всякий раз, когда количество ловушек превышает настроенное, я получаю следующую ошибку:
org.snmp4j.MessageException: Operation not permitted
at org.snmp4j.MessageDispatcherImpl.sendPdu(Unknown Source)
at org.snmp4j.Snmp.sendMessage(Unknown Source)
at org.snmp4j.Snmp.send(Unknown Source)
at org.snmp4j.Snmp.send(Unknown Source)
Когда я получаю эту ошибку, / proc / (pid) / fd count также увеличивается в машине, затем достигает максимального значения fd, и я получаю эти сообщения об ошибках:
- "СООБЩЕНИЕ: Слишком много открытых файлов
java.net.SocketException: слишком много
открыть файлы "
- Невозможно запустить программу "/ bin / sh":
java.io.IOException: ошибка = 24, тоже
много открытых файлов.
Как я могу решить эту проблему?