AWS EC2でMySqlがToo Many Connectionsになってしまう
解決したいこと
AWS EC2にApacheでDjangoアプリを動かしているのですが、
そのままにしておくと どんどんMySqlのプロセス数が増えていき、最終的にToo many Connectionsになってしまいます。
原因(予測)
実はDjangoアプリの方で、定期的に(1分に1回)データベースの状態を見に行くコードを書いています。
それが原因だと思うのですが対処法がわかりません。
どういう風にアプリorMysqlの設定を変えればようのでしょうか?
こんな感じで増えていってます....
| Id | User | Host | db | Command | Time | State | Info |
+-------+-----------------+---------------------+-------------+---------+---------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 8652637 | Waiting on empty queue | NULL |
| 24725 | rdsadmin | localhost | NULL | Sleep | 9 | | NULL |
| 27863 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | NULL | Query | 0 | init | show processlist |
| 27867 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 637 | | NULL |
| 27870 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 524 | | NULL |
| 27871 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 517 | | NULL |
| 27872 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 397 | | NULL |
| 27873 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 472 | | NULL |
| 27874 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 284 | | NULL |
| 27875 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 277 | | NULL |
| 27876 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 232 | | NULL |
| 27878 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 97 | | NULL |
| 27879 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 217 | | NULL |
| 27880 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 404 | | NULL |
| 27881 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 397 | | NULL |
| 27882 | SCH_web_admin | xxxxxxxxxxxxxxxxxxx | scheduleweb | Sleep | 352 | | NULL |
+-------+-----------------+---------------------+-------------+---------+---------+------------------------+------------------+
#apps.py
class AccountConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "account"
def ready(self):
from .regularclass import start
start()
#regularclass.py
def start():
scheduler = BackgroundScheduler()
scheduler.add_job(fordo, 'interval', minutes=1)
scheduler.start()
def fordo():
MendanHensinConfirm()
def MendanHensinConfirm():
MendanAll = MendanMaster.objects.all()
for mendandata in MendanAll:
if(mendandata.state_m == 0):
mendanstate = 1
mendantaisyo = TaisyosyaMaster.objects.filter(code_t=mendandata.code_m)
for taisyosya in mendantaisyo:
if(taisyosya.state_t == 0):
mendanstate = 0
print( str(mendandata.code_m) + "返信していない人あり")
if(mendanstate == 1):
ketteihyou = ScheduleAdjust2.main_function(mendandata.code_m)
#決定表に対象者のもれがないか確認する関数
ScheduleAdjust2.NittteiDataRegister(ketteihyou, mendandata.code_m)
result = MendanMaster.objects.get(code_m=mendandata.code_m)
result.state_m = 1
result.save()
else:
print( str(mendandata.code_m) + "面談日程が決定しています")
ちなみに現状MendanMasterにはなんのレコードも入れていないので
MendanAll = MendanMaster.objects.all()
の時点で処理は終わるはずなんですが。。。。
0