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
}