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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

4回答

4908閲覧

[AWS]MySqlで異常に読み書きが増えてメモリーがなくなる問題

zer0

総合スコア24

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2017/06/11 05:18

AWS db.t2.small を利用しています。
数日に1回異常な読み書きが発生し、サーバーが重くなり、最終的に赤くセスできなくなる問題が発生しています。

再起動すれば直るのですが、一時的な処置にしかならず困っています。
前回こちらでログの取得方法を質問させていただき、ログを見てみました。
https://teratail.com/questions/77746

普段見かけない同じログが大量に生成されていました。

2017-06-10 23:55:23 32552 [ERROR] Error log throttle: 6 'Can't create thread to handle new connection' error(s) suppressed 2017-06-10 23:55:23 32552 [ERROR] Can't create thread to handle request (errno= 11) 2017-06-10 23:56:49 32552 [ERROR] Error log throttle: 15 'Can't create thread to handle new connection' error(s) suppressed 2017-06-10 23:56:49 32552 [ERROR] Can't create thread to handle request (errno= 11) 2017-06-10 23:57:50 32552 [ERROR] Error log throttle: 15 'Can't create thread to handle new connection' error(s) suppressed 2017-06-10 23:57:55 32552 [ERROR] Can't create thread to handle request (errno= 11) 2017-06-10 23:58:57 32552 [ERROR] Error log throttle: 40 'Can't create thread to handle new connection' error(s) suppressed 2017-06-10 23:58:57 32552 [ERROR] Can't create thread to handle request (errno= 11) 2017-06-11 00:00:04 32552 [ERROR] Error log throttle: 17 'Can't create thread to handle new connection' error(s) suppressed

Can't create thread to handle request で検索してみたのですがどう対処すればいいのか分かりませんでした。

2017-06-10 23:23:03 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes) 2017-06-10 23:23:39 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes) 2017-06-10 23:25:59 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes) 2017-06-10 23:25:59 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes) 2017-06-10 23:26:48 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes) 2017-06-10 23:27:05 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes) 2017-06-10 23:27:43 32552 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 259104 bytes)

Out of memoryに関して調べたところ再起動したら直るくらいの情報しかえられませんでした。

どうすればこのエラーを抜本的に解決できるのかご教示頂けますと幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

チューニングが必要かと思いますが、これだけでは何とも言えません。

全て説明するのが難しいのですが、大まかに言って、out of memoryの原因は、接続数スレッド数メモリ使用量の合計がメモリ合計を超えてしまっているのが原因です。他にもメモリを使う設定があるので、それらも含めて最大接続数でもメモリ容量が超えないような設定にしないと、負荷が高くなった時にハングアップします。
メモリ使用量を超えないような設定にすれば、少なくともmysqlを再起動しなければならない状況は回避できるはずです。
※ただし、アプリ側はアクセス数>接続数になればタイムアウト等でエラーになることはあります。その場合は負荷の軽減orサーバーの増強をするしかありません。

参考
【MySQL】総メモリー使用量を算出するSQL作ってみた
http://blog.mogmet.com/calculate-mysql-total-memory-sql/

MySQLTunerというスクリプトもありますので、参考にするとよいと思います。(ただし、言われたとおりにそのまま設定するとメモリオーバーになる場合があります)

その場しのぎの緊急の対応としては、max_connectionsを少な目にしておくのが良いかと思います。

投稿2017/06/11 14:29

CodeLab

総合スコア1939

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

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

zer0

2017/06/15 16:49

詳細なご説明をいただきありがとうございます。 再起動から数時間でメモリーが90%以上使用状態になることを考えると ハングアウトしてしまっているのかなと思います。 今回はコストはかかりますがサーバーのメモリを増やす方法で先ずは様子を見てみようと思います。 その他多数のご回答を頂いた皆様もありがとうございました。 とても参考になるご意見ばかりでベストアンサーを決め兼ねました。
guest

0

MySQL のパラメータをチューニングする必要があると思いますが、どの辺りが最適なのかはシステムの状況によるので、何とも言えないです。

MySQL の必要メモリ量は、

グローバルバッファの合計サイズ + ( 各スレッドバッファの合計サイズ × 最大接続数 )

で、計算できると思います。
利用状況に合わせて、接続数・タイムアウト時間・各バッファサイズ等の設定を見直して、適切に設定してください。

計算した必要メモリ量が、db.t2.small のメモリ 2G を超えるようであれば、DB インスタンス を見直す必要があるかもしれません。

投稿2017/06/11 05:56

CHERRY

総合スコア25171

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

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

0

メモリの量が足りない場合は、アプリの使われ方が変わらないと言うことを前提にすると、
以下2つしか根本解決方法はありません。

1.スケールアップする(メモリ増やす)
2.アプリを改修して低メモリで動くようにする

1が一番お手軽に解決できる方法かと思います。

投稿2017/06/13 07:13

moonphase

総合スコア6621

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

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

0

DBのチューニングは専門外なので根本対処は他の方に譲りますが、取り急ぎサービス断対策の応急処置としてはDBインスタンスのサイズを大きくすると凌げると思います。

db.t2.smallは動作検証程度ならともかくサービスを動かすには流石に厳しいケースが多いです(動かすモノや負荷にもよりますが)。
db.t2.medium(4GB), db.t2.large(8GB), db.m4.large(8GB)辺りはそこそこメモリ容量も大きくそこまで高くはないと思いますがいかがでしょうか。

投稿2017/06/12 17:00

編集2017/06/12 17:01
Ryo_Yamaoka

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問