nazoです。 先日、とある go で書かれたWebサーバーで、too many open files が出て死ぬ、という問題が発生しました。今回はその点に関して調査した内容を紹介したいと思います。 調査内容と結果 too many open files は、言うまでもなく、ファイルの開きすぎで出るエラーですが、 lsof してみたところ、 can't identify protocol 状態のものが大量に存在していました。ソケットが正常に閉じられずに放置されていたようです。 さらに調査をしていると、トランザクションの Begin 〜 Commit をコメントアウトすると発生しなくなることが判明し、そこから以下のバグが発見できました。(gorm を使用しています。また実際のコードとは違います) tx := db.Begin() db.Model(&user).Where("id = ?",

