Linux系统优化

6 篇文章 0 订阅

问题描述:

linux服务器中放了一个PHP的系统和系统配套使用的数据库MySQL。最近发现系统老是进不去,调查结果显示,MySQL服务挂了。

解决方案:尝试进入MySQL:

mysql -r root -p

报错: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

查看MySQL状态:

service  mysqld  status

显示:Redirecting to /bin/systemctl status  mysqld.service
Unit mysqld.service could not be found.

原因:默认的这个环境一起安装了一个叫MariaDB的数据库(他是MySQL的一个分支版本),可百度查看这个数据库的详细信息。 也就是没有安装MySQL数据库,要使用MariaDB命令操作。

接着输入命令:

 systemctl start mariadb.service

显示:Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.

按照提示分别输入systemctl status mariadb.service 和 journalctl -xe 后,显示的内容没有任何报错原因提示。

查找数据库的错误日志:先看配置文件中配置的路径 cat /etc/my.cnf :

再打开log-error后面路径中的文件即可: tail -f xxxxxx.log(从上面文件中找到的文件名),打开后就发现了错误原因:

200328 11:41:13 InnoDB: Fatal error: cannot allocate memory for the buffer pool
200328 11:41:13 [ERROR] Plugin 'InnoDB' init function returned error.
200328 11:41:13 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
200328 11:41:13 [Note] Plugin 'FEEDBACK' is disabled.
200328 11:41:13 [ERROR] Unknown/unsupported storage engine: InnoDB
200328 11:41:13 [ERROR] Aborting

也就是内存不够了,导致innoDb起不来,去配置启动时所需要的内存即可:

vim /etc/my.cnf

在该文件中,找是否有innodb_buffer_pool_size 这个属性 ,如果有改成128M以内的值,如果没有则添加这个属性设置值:

innodb_buffer_pool_size = 80M

保存退出。再启动数据库服务:

 systemctl start mariadb.service

OK !!!! 顺利启动完成,再登陆到mysql 中就算启动成功了。

分界线------------------------------------------------------------------------------------------------------------------------------------------------------分界线

过了一会,服务器又挂了,what ??? 满脸黑人问号

使用命令:free -mh ,发现内存不多了,查看哪些进程占内存多:ps auxw --sort=%mem ,发现有一堆相同名字的进程占了很多内存:

这是什么鬼,百度后发现这个时php -fpm服务的进程,这个进程有这么多,是因为可以开辟很多子进程,这个服务时可以配置的,修改配置文件:

vim /etc/php-fpm.d/www.conf

找到 pm.max_children 字段,这个是控制子进程的数量的发现其值过大:我的是 pm.max_children 值为50,每一个进程占用1%-2.5%的内存,加起来就耗费大半内存了,所以我们需要将其值调小,将其设置为25,同时,检查以下两个属性:pm.max_spare_servers : 该值表示保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.min_spare_servers : 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程;

这两个值均不能不能大于 pm.max_children 值,通常设置 pm.max_spare_servers 值为 pm.max_children 值的60%-80%。max_spare_servers 我设置为20

最后,重启php-fpm:systemctl restart php-fpm,报错了:

原因:这个服务已经在运行这,端口已经被占用了,那就简单了 ,先停掉,再启动即可:

systemctl stop php-fpm
systemctl start php-fpm

这个时候还要吧停掉的数据库服务启动下就好了:systemctl start mariadb.service,完成优化,内存使用情况也变好了。

希望能给遇到同样问题的人填坑。加油

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值