728x90
반응형

Go 프로젝트에서 http 클라이언트를 만들어서 활용하고 있었는데 어느날 서버에 응답이 없었다.

 

그래서 서버에 들어가서 확인해보니 too many open files라는 에러가 나고 있었다.

 

netstat으로 확인해보니 CLOSE_WAIT 상태로 많이 쌓여 있었다.

 

어디가 문제인가 살펴보니 defer resp.Body.Close() 를 하는데 상태값이 200인 경우에만 닫도록 돼있었다.

 

(문서에서 Body를 읽은 경우엔 항상 닫아주라고 써있다.)

resp, err := http.Get("http://example.com/")
if err != nil {
    return
} else if resp.StatusCode != 200 {
    return
}
defer resp.Body.Close()

다음과 같이 수정한 이후 경과를 살펴보니 잘 동작하는 것을 확인할 수 있었다.

resp, err := http.Get("http://example.com/")
if err != nil {
    return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
    return
}

 

참고 문헌

  1. https://golang.org/pkg/net/http/

반응형

+ Recent posts