Linux Socket Leak(Socket 누수)의 원인과 해결 방법

Linux 서버를 운영하다 보면 서비스가 오랫동안 실행된 후 Too many open files, EMFILE, Cannot assign requested address, Connection refused 등의 오류가 발생하는 경우가 있습니다. 이러한 문제의 대표적인 원인 중 하나가 바로 Socket Leak(Socket 누수)입니다. Socket Leak은 프로그램이 더 이상 사용하지 않는 소켓(Socket)을 정상적으로 닫지 않아 파일 디스크립터(File Descriptor)가 계속 증가하는 현상을 말합니다. 시간이 지날수록 시스템 … 더 읽기

Linux Too Many Open Files 오류의 원인과 해결 방법

Linux 서버를 운영하다 보면 웹 서버, 데이터베이스, Java 애플리케이션, Docker, Kubernetes 환경에서 Too many open files, EMFILE, errno 24와 같은 오류를 자주 볼 수 있습니다. 이 오류는 프로세스가 사용할 수 있는 파일 디스크립터(File Descriptor, FD)의 한도를 초과했을 때 발생하는 대표적인 시스템 오류입니다. 이 오류가 발생하면 새로운 파일을 열거나 네트워크 연결을 생성할 수 없으며, 심한 경우 … 더 읽기

Linux Connection Reset by Peer 오류의 원인과 해결 방법

Linux 서버를 운영하다 보면 웹 서버, API 서버, 데이터베이스 또는 소켓(Socket) 프로그램에서 Connection reset by peer, ECONNRESET과 같은 오류 메시지를 자주 볼 수 있습니다. 이 오류는 TCP 연결이 정상적으로 종료(FIN)되지 않고 상대방에 의해 RST(Reset) 패킷으로 강제 종료되었음을 의미합니다. 간헐적으로 발생하는 Connection Reset은 일반적인 네트워크 환경에서도 나타날 수 있지만, 특정 서비스에서 지속적으로 발생하거나 대량으로 기록된다면 네트워크 … 더 읽기

Linux Broken Pipe 오류(Broken pipe, EPIPE)의 원인과 해결 방법

Linux 서버를 운영하다 보면 웹 서버, API 서버, 데이터베이스 또는 소켓(Socket) 기반 프로그램에서 Broken pipe, write: Broken pipe, EPIPE와 같은 오류를 자주 볼 수 있습니다. 이 오류는 프로그램이 이미 종료된 연결에 데이터를 전송하려고 할 때 발생하는 대표적인 TCP 소켓 오류입니다. 간헐적으로 발생하는 Broken Pipe는 정상적인 네트워크 환경에서도 나타날 수 있지만, 지속적으로 발생하거나 대량으로 기록된다면 애플리케이션 … 더 읽기

Linux TCP RST 패킷이 발생하는 원인과 해결 방법

Linux 서버를 운영하다 보면 tcpdump나 Wireshark로 패킷을 분석할 때 RST(Reset) 패킷이 반복적으로 발생하는 것을 볼 수 있습니다. RST 패킷은 TCP 연결을 정상적으로 종료(FIN)하는 대신 즉시 연결을 강제로 종료하는 데 사용됩니다. 간헐적으로 발생하는 RST는 정상적인 상황일 수 있지만, 지속적으로 발생하거나 대량으로 발생한다면 애플리케이션 오류, 네트워크 문제, 방화벽 설정, 포트 문제 등을 의심해야 합니다. 이번 글에서는 TCP … 더 읽기

Linux TCP FIN_WAIT1 / FIN_WAIT2 상태가 많을 때 원인과 해결 방법

Linux 서버를 운영하다 보면 ss -ant 또는 netstat -ant 명령을 실행했을 때 FIN_WAIT1, FIN_WAIT2 상태의 TCP 연결이 평소보다 많이 쌓여 있는 것을 볼 수 있습니다. 이러한 상태는 TCP 연결 종료 과정에서 발생하는 정상적인 단계이지만, 특정 환경에서는 수천 개 이상 누적되어 서버 자원을 소모하고 새로운 연결 처리에 영향을 줄 수 있습니다. 특히 웹 서버, API 서버, … 더 읽기

Linux TCP CLOSE_WAIT가 계속 쌓이는 원인과 해결 방법

Linux 서버를 운영하다 보면 ss -ant 또는 netstat -ant 명령을 실행했을 때 CLOSE_WAIT 상태가 수백 개 또는 수천 개까지 증가하는 경우가 있습니다. 특히 웹 서버나 API 서버에서 CLOSE_WAIT가 지속적으로 증가하면 새로운 연결 처리 속도가 느려지고 파일 디스크립터(File Descriptor)가 부족해지는 문제가 발생할 수 있습니다. TIME_WAIT는 정상적인 TCP 종료 과정에서 발생하는 상태이지만, CLOSE_WAIT가 계속 쌓이는 것은 대부분 … 더 읽기

Linux TCP TIME_WAIT가 너무 많을 때 원인 분석 및 해결 방법

Linux 서버를 운영하다 보면 ss -ant 또는 netstat -ant 명령어를 실행했을 때 수천, 수만 개의 TIME_WAIT 상태를 발견하는 경우가 있습니다. 특히 웹 서버, API 서버, 프록시 서버처럼 짧은 TCP 연결이 빈번하게 생성되는 환경에서는 TIME_WAIT 연결이 급격히 증가할 수 있습니다. TIME_WAIT가 많다고 해서 반드시 문제가 있는 것은 아니지만, 과도하게 증가하면 포트 고갈(Ephemeral Port Exhaustion), 파일 디스크립터 … 더 읽기

Linux TCP SYN Flood 공격이란 무엇이며 탐지 및 대응 방법

웹 서버나 API 서버를 운영하다 보면 갑자기 접속이 느려지거나 정상 사용자가 서비스에 접속하지 못하는 상황이 발생할 수 있습니다. 그 원인 중 하나가 바로 TCP SYN Flood 공격입니다. SYN Flood는 TCP의 3-Way Handshake 과정을 악용하여 서버의 연결 대기 큐(Backlog Queue)를 가득 채우는 대표적인 DDoS 공격 기법입니다. 공격이 계속되면 정상적인 사용자의 연결 요청이 거부되거나 응답 속도가 크게 … 더 읽기

Linux TCP Fast Open(TFO)란 무엇이며 설정 및 성능 최적화 방법

웹 서비스나 API 서버를 운영하다 보면 TCP 연결을 맺는 과정에서 발생하는 지연(Latency)이 전체 응답 속도에 영향을 미치는 경우가 많습니다. 일반적인 TCP 연결은 3-Way Handshake가 완료된 이후에야 데이터를 전송할 수 있기 때문에 최초 연결 시 일정한 지연이 발생합니다. 이러한 문제를 해결하기 위해 Linux에서는 TCP Fast Open(TFO) 기능을 제공합니다. TCP Fast Open은 최초 연결 과정에서도 일부 데이터를 … 더 읽기