前提・実現したいこと
Webアプリを開発しているのですが、Appコンテナが数時間おきに落ちてしまうので解決したいです。
- EC2インスタンス1台にAppコンテナとMySQLコンテナを載せています
- ルーティングはGollira/muxを使っていますが、Ginなどは利用せずGo標準のhttp/templateを使用しています
発生している問題・エラーメッセージ
docker logs -f
でコンテナのログ出力を見たところ、断続的に次のエラーのような警告(?)が出続けている状況です。
2019/09/03 14:10:05 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:10:06 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:10:07 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:10:07 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:10:08 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:10:08 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) . .
この警告文が出続けてはいるものの、数時間はこのまま動作し続けます。
Appコンテナが落ちた後にログを見ると、落ちる直前に次のようなエラーがちらほら発生するようになっています。
2019/09/03 14:09:38 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:09:38 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:09:43 http: panic serving 124.37.197.133:56112: Get http://hoge.jp/fuga.html: dial tcp XXX.XXX.XXX.XXX:80: i/o timeout goroutine 33247 [running]: net/http.(*conn).serve.func1(0xc0001a0820) /usr/local/go/src/net/http/server.go:1769 +0x139 panic(0x8c18c0, 0xc00033ea80) /usr/local/go/src/runtime/panic.go:522 +0x1b5 github.com/hoge/fuga/handler.xxxHandler(0x9f1360, 0xc000216540, 0xc0005c8500) /go/src/app/handler/root.go:48 +0x26e net/http.HandlerFunc.ServeHTTP(0x958d10, 0x9f1360, 0xc000216540, 0xc0005c8500) /usr/local/go/src/net/http/server.go:1995 +0x44 github.com/gorilla/mux.(*Router).ServeHTTP(0xc000108240, 0x9f1360, 0xc000216540, 0xc0005c8300) /go/pkg/mod/github.com/gorilla/mux@v1.7.3/mux.go:212 +0xe3 net/http.serverHandler.ServeHTTP(0xc000023790, 0x9f1360, 0xc000216540, 0xc0005c8300) /usr/local/go/src/net/http/server.go:2774 +0xa8 net/http.(*conn).serve(0xc0001a0820, 0x9f4520, 0xc00025a180) /usr/local/go/src/net/http/server.go:1878 +0x851 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2884 +0x2f4 2019/09/03 14:09:45 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) 2019/09/03 14:09:47 http: superfluous response.WriteHeader call from github.com/hoge/fuga/handler.hogefugaRenderTemplate (root.go:27) . .
そして、落ちたタイミングでは次のようなエラーが発生しています。
(RSSフィードからGETするFunctionがあるので、そこでエラーが発生しているように見えます)
Error: rss feed get error. err: Get http://hoge.jp/index.rdf: dial tcp XXX.XXX.XXX.XXX:80: i/o timeouterr: Get http://hoge.jp/index.rdf: dial tcp XXX.XXX.XXX.XXX:80: i/o timeout
該当のソースコード
警告文にある root.go:27
付近のコードを一部掲載します。
go
1func hogefugaRenderTemplate(w http.ResponseWriter, tmpl string, a []entity.ArticleIndex) { 2 err := templates.ExecuteTemplate(w, tmpl+".html", a) 3 if err != nil { 4 http.Error(w, err.Error(), http.StatusInternalServerError) // ここが27行目 5 } 6} 7 8// hogefugaHandler :トップページのハンドラ 9func hogefugaHandler(w http.ResponseWriter, r *http.Request) { 10 articleIndexList := usecase.GetArticleIndexList(db.DbConnection, 100) 11 hogefugaRenderTemplate(w, "hogefuga", articleIndexList) 12}
試したこと
警告文にあるhttp: superfluous Golang
といった検索ワードで調べてみたのですが、文献があまりなく、
当方はじめてのWebアプリ開発のため不慣れな点があり、こういった場合にどのように対処すべきかわからないでいます。
この問題の解決策もそうですが、こういったエラーに陥った際のベストプラクティスも合わせてご教示いただけると幸甚です。
補足情報(FW/ツールのバージョンなど)
何か必要な情報がございましたら、コメントいただければすぐに用意させていただきます。
追記
Go
1// router.go 2func Router() *mux.Router { 3 r := mux.NewRouter() 4 5 // 静的ファイルの読み込み 6 r.PathPrefix("/resources/").Handler(http.StripPrefix("/resources/", http.FileServer(http.Dir("resources")))) 7 8 r.HandleFunc("/", handler.hogefugaHandler) //トップページのハンドラ。警告文発生箇所 9 r.HandleFunc("/xxx", handler.xxxHandler).Methods("GET") 10 11 return r 12}