質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

1回答

1786閲覧

docker-composeで起動したWebアプリが頻繁に落ちる( Golang http/template )

sodneter

総合スコア11

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

1クリップ

投稿2019/09/03 14:48

編集2019/09/05 09:42

前提・実現したいこと

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2019/09/04 05:01

hogefugaHandlerをどのようにHandleさせているかも情報としてほしいところ。
sodneter

2019/09/05 09:46

コメントありがとうございます。 router.goの情報を記載させていただきました。 不足がないか確認いただけると幸いです。 よろしくお願いいたします。
guest

回答1

0

おそらくこの辺りが参考になるのではないでしょうか。

goroutineでのpanicのハンドリング
Log flooded by "Superfluous response.WriteHeader call" entries #2537

投稿2019/09/03 21:47

Newbi

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問