TIME WAIT 관련

watch -n 2 "netstat -an | egrep 'ESTABLISHED|TIME_WAIT' | wc -l"
// 그냥 httpclient를 바로 셋해줄 수도 있지만 아래와 같이 transport 옵션을 사용하여 커넥션 풀 설정을 넣어줄 수 있음
proxy := httputil.NewSingleHostReverseProxy(u)
proxy.Transport = &http.Transport{
	Proxy: http.ProxyFromEnvironment,
	DialContext: (&net.Dialer{
		Timeout: time.Duration(Context.KENHttpDialTimeoutSec) * time.Second,
		KeepAlive: time.Duration(Context.KENHttpDialKeepAliveSec) * time.Second,
		DualStack: true,
	}).DialContext,
	ForceAttemptHTTP2: true,
	// 커넥션 풀 갯수 세팅
	MaxIdleConns: Context.KENHttpMaxIdleConns,
	// 커넥션 풀 유지 갯수, 이 수가 적으면 MaxIdleConns를 뺀만큼의 커넥션을 계속 생성하게 됨
	MaxIdleConnsPerHost: Context.KENHttpMaxIdleConnsPerHost,
	IdleConnTimeout: time.Duration(Context.KENHttpIdleConnTimeoutSec) * time.Second,
	TLSHandshakeTimeout:   10 * time.Second,
	ExpectContinueTimeout: 1 * time.Second,
}
EntityUtils.consume(HttpEntity)
# 커널에서 reuse 옵션을 키는 명령어
sysctl -w net.ipv4.tcp_tw_reuse="1"

too many open file 에러 관련

Temporary error when accepting new connections: accept tcp4 0.0.0.0:8551: accept4: too many open files
# 하나는 소프트, 하나는 하드 옵션
ulimit -a
ulimit -aH

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/719d45ce-f583-4115-86b5-5f7d193d84d5/_2020-02-15__2.23.16.png