약 1300개의 호스트에 ICMP 에코 요청을 보내는 Linux 시스템(CentOS Linux 버전 7.3.1611)에 Heartbeat 클라이언트를 설정하려고 합니다. 그러나 이 숫자는 앞으로 더 높아질 것이다. Heartbeat에서 생성된 메시지는 다른 서버의 Logstash 인스턴스로 전송됩니다.
이러한 요청은 3분마다 이루어집니다. 첫 번째 요청 이후에는 다음 메시지 중 다수에 오류가 포함됩니다.
"write ip4 0.0.0.0->x.x.x.x: sendto: no buffer space available"
저는 이 문제를 완화하기 위해 1초 이내에 요청 횟수를 줄이기 위해 요청을 시차를 두는 것을 포함하여 다양한 방법을 시도했습니다. 이로 인해 해당 파이프라인 끝에서 데이터 동기화 문제가 발생했고 문제가 완전히 해결되지 않았으므로 나에게는 실제로 실행 가능한 옵션이 아니었습니다.
온라인 조사를 통해 시스템에서 TCP/IP 연결에 할당하는 메모리를 늘렸지만, 제가 아는 한 이는 ICMP 요청이므로 분리되어야 합니다.
또한 컴퓨터가 원격이고 돌아가서 복원할 방법이 없기 때문에 네트워크 인터페이스를 복원할 수 없습니다.
또한 /proc/sys/net/ipv4에서 icmp_ratelimit 변수를 늘리고 0으로 설정하는 것을 테스트했지만 그것도 도움이 되지 않았습니다.
내 질문은 매우 일반적인 것입니다. 이 문제의 원인은 무엇입니까? 이러한 요청이 동시에 나갈 수 있도록 시스템에서 일종의 변수를 조정해야 합니까? 오류 메시지가 어떤 버퍼를 참조하는지 실제로 추론할 수 없습니다.
어떤 도움이라도 대단히 감사하겠습니다...
추신: 추가 설명이 필요하면 기꺼이 제공해 드리겠습니다.
편집하다
여전히 결함이 다른 곳에 있는지 확실하지 않지만 wmem_max, wmem_default, rem_max, rem_default 변수에 의해 결정되는 소켓 버퍼의 크기를 늘리면 /proc/sys/net/core
문제가 해결되었습니다. 모든 ICMP 에코 요청의 총 데이터 크기는 너무 커서 이전 최대값인 208kb를 밑돌 수 없으므로 대부분이 삭제됩니다. 삭제된 요청 수가 매번 달라지는 이유를 실제로 설명하지는 않습니다. 아마도 근본적인 문제가 있을 수 있습니다.
이제 유일한 문제는 시스템을 재부팅할 때마다 이러한 변수가 208kb로 재설정된다는 것입니다. 이러한 변경 사항을 지속적으로 유지하려면 어떻게 해야 합니까?