2019独角兽企业重金招聘Python工程师标准>>>
十一假期结束之后,发现自己的博客不时出现数据库连接失败,经检查是mysql停止运行了。之前出现过这样的情况,但是没有那么频繁,于是就写了一个检查mysql进程的脚本,如果mysql进程停止了,就自动启动mysql进程。但是这次的问题是,mysql刚一重启,没过多久就又挂了。
由于之前问题没这么严重,而十一期间有没有对博客做什么修改。我一度认为是阿里云的问题,不稳定或者逼低配置用户升级(我的阿里云是最低配置512M内存)。查看mysql的日志,里边报有pthread_create returned 11,在网上查了解决方案,修改了ulimit -s,ulimit -u却没有任何作用。后来查看内存(free -m),只剩下可怜的3、4MB,由于是只有一个博客,实在不想去升级服务器。于是又按照网上的办法关闭了mysql的innodb引擎,依然无济于事。使用top命令查看,发现有很多个php-fpm进程,并且占据了大量内存。我尝试将php-fpm重启,发现很快又产生大量php-fpm进程,内存迅速被耗尽。尝试修改了php-fpm的配置,依然没有作用。
当我查看了nginx的访问日志之后,才真正找到问题所在,有一个IP不停地刷项目根目录下的xmlrpc.php文件,所以php-fpm的进程就会一直满负荷运行,将系统资源耗尽。
根据关键字xmlrpc.php百度了一下,原来这是攻击wordpress博客的一种常见方式,网上有三种解决方案,第一种是屏蔽 XML-RPC (pingback) 的功能,add_filter('xmlrpc_enabled', '__return_false');第二种方法就是通过.htaccess屏蔽xmlrpc.php文件的访问;第三种同样的是修改.htaccess文件,如果有用户访问xmlrpc.php文件,让其跳转到其他不存在的页面,降低自身网站的负担。
由于我的网站用不到xmlrpc的功能,所以我就简单暴力的把这个文件改了个名字,这样一来非法的访问就直接被nginx阻止了,问题得到解决,内存的占用一下就下来了。
除非注明,文章均为( 江上轻烟 )原创,转载请保留链接: http://www.zhizhi123.com/?p=308