클라이언트와 서버 사이에 celery
-config를 실행하고 있습니다. rabbitmq
클라이언트 프로세스는 서버의 포트 5672에서 연결을 엽니다. netstat -np
서버에서 이것을 사용하여 소켓이 설정되었다고 보고했기 때문에 확인했습니다.
클라이언트의 프로세스가 중단되어 더 이상 존재하지 않습니다. 그러나 netstat -np
여전히 연결이 설정된 것으로 표시됩니다. 또한 클라이언트에서 실행하여 netstat -np
해당 포트의 서버에 연결되는 프로세스가 없음을 확인했습니다.
소켓이 ESTABLISHED 상태로 유지되는 이유는 무엇입니까?
답변1
AMQP필요클라이언트가 연결을 제대로 닫지 않으면(장기 실행 작업의 경우) 연결의 서버 측이 열린 상태로 유지됩니다. 더 읽어보세요이 게시물.
이러한 연결을 수동으로 닫거나 rabbitmqctl
cron 작업에서 이를 수행하는 스크립트를 작성할 수 있지만 둘 다 애플리케이션 수준 문제에 대한 매우 보기 흉한 외부 접근 방식입니다.
가능하다면 열어주세요심장 박동그리고 시간 초과를 알려진 가장 긴 처리 작업보다 15-20% 더 길게 설정하세요. 이렇게 하면 하트비트 시간 초과 후 "죽은" 연결이 재활용되지만, 너무 오랫동안 사용했던 클라이언트의 연결도 끊어지므로 주의하세요.