celeryd mysql stop_Django 部署中的踩天坑 MySQL 占用内存过高

接近2周没记录任何文章,是因为我在这个期间踩了天坑,整整2个礼拜没找到问题,虽然最后结论很简单是优化了MySQL,但是这个过程真的让人吐血。

故事开端:

如上一篇文章,我部署在腾讯云上面

腾讯云配置:1C1G5M

Django: 2.1

MySQL: 8.0

其他相关的包:

Supervisor + Gunicorn + Celery

一开始我只是用supervisor运行了Gunicorn来启动Django项目,运行良好。

然后我在supervisor的配置中加入了celery这个program,噩梦就开始了。

访问我的主页,突然就502报错了,回到服务器端,输入mysql,结果发现竟然报错找不到sock文件?!?!

can't connect to mysql server through socket /var/run/mysqld/mysqld.sock

一头的雾水....google了一大圈,有的说要重装,有的说要改配置文件,最后我直接重启了服务器,发现mysql又可以访问了?

接着继续尝试运行supervisor,同时Django项目和Celery,访问主页,mysql又挂了?!?!

这下开始仔细找问题了,然后发现,只要在同时运行了Django和Celery之后,/var/run/mysqld这个文件夹,就整个消失(被删除了??)脑袋都炸了

然后继续通过/var/log/mysql/error.log里面的日志找问题

终于看到如下信息

3ab146fd5153

MySQL日志

emmmm....看上去像是和内存有关系的信息?搜了一大圈

原来是和innodb_buffer_pool_size有关系的,默认是128MB,不过我的服务器内存才1G....会不会是因为这个呢?死马当活马医,去修改这个配置,我改成了8M.

文件在 /etc/mysql/mysql.conf.d/mysqld.cnf

3ab146fd5153

修改配置

我心想着,改成8M总行了吧,最低要求也是5M.....

结果是太天真了。

重新启动mysql后,测试,一样没用....

但是故障不一样了,他不会发生/var/run/mysqld文件夹被删除的情况了

不过依旧无法访问主页,报错500.

这下是彻底懵了,我想mysql这里应该不存在问题了,那问题在哪呢?

于是我在Django的settings.py里面设置了logging部分,想要看看到底这个500来自于哪里?

下面是相关报错的信息。

3ab146fd5153

Pymysql报错

看了开头,他竟然报的是pymysql/connetions.py的错误...

可问题是我没有额外需要用到pymysql和mysql的地方啊。。。

celery里面的broker和backend我都是连的redis...哪里来的通过pymysql链接MYSQL??

而且我只运行Django的话,连接数据库读取是没问题的,说明肯定不是连接的问题.....

网上又搜了几天,今天突然想到,出问题的时候,服务器会变得非常卡顿,在命令行输入命令都会有问题,会不会是CPU或者内存占比太高了?

输入top一看,mysql占了40%+,celery占了15%左右。

可能问题出在mysql上?去搜了一下关于mysql占内存太高的信息,有筒子说是因为mysql的performance_schema=ON被打开了,占用了相当一大部分的内存.

在mysql看一下这个参数的情况,果然是打开的状态

3ab146fd5153

on.jpg

尝试关闭,还是在mysql的配置文件里面进行修改

3ab146fd5153

关闭Performance_schema

重启mysql,命令行输入top看一下内存占比。

3ab146fd5153

mysql占比

然后,最终的尝试

sudo supervisorctl start all

终于正常运行了,网站丝滑般流畅................

整了2个礼拜的问题,总算解决掉了.............

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值