将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程

WordPress

最近有一个小伙伴找到搬主题,说自己的VPS主机文件出现了一些莫名其妙的问题,比如安装不了任何程序包,WordPress程序莫名其妙出错,PHP进程占CPU很高等等。搬主题经过仔细观察后发现是session会话的问题,捣鼓了后终于解决这个问题,顺便分享一下这个解决过程。

一、问题分析

搬主题登陆该主机后一看,安装程序包出错,WordPress经常登陆不上,用top命令查看CPU情况,发现直接占用接近100%。于是搬主题第一感觉那就是被攻击了。查看目前的并发连接后,发现并没有多少连接,带宽也使用正常,那为什么会出现CPU接近100%的情况呢。将其网站的主题换成默认的,插件全部禁用后,问题依然没有解决。

观察了站点的进程占用几分钟后发现,因为其用的环境是OpenLiteSpeed的,其中lsphp虽然才几个进程,但是基本占用了90%以上的CPU资源。那说明问题出在了lsphp上面。

之前以为是没有开缓存,于是查看Memcached的运行情况,发现服务正常。最后想到会不会是空间不够了,于是用下面的命令查看

//查询目前的硬盘占用情况
df -h

基本没有占满的情况呢,硬盘的容量还有很大的剩余呢。再用另外一个命令查看

//显示inode信息
df -i

结果发现问题了,其中 /dev/vda1 竟然已经100%了。其实储存文件元信息的区域就叫做inode,目前为100%,那说明小文件太多,需要清理了。

然后搬主题就开始进行空间清理的过程

二、进行主机硬盘空间的清理

如果确定哪些文件占用目前的硬盘空间呢,这里我们可以先登陆SSH,先进入根文件夹。

cd /

然后输入如下命令

du -sh *
将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程插图1

发现其中usr文件夹竟然占了恐怖的8G容量,于是进入usr文件夹,再次用 du -sh * 命令查看。里面除了swap交换文件,剩下的就是local文件夹了。

将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程插图2

再次进入local文件夹,一个文件一个文件夹的去分析。最后发现里面的logs文件夹直接占了1G,这个文件夹主要是存放平时的错误日志、访问日志等等。接下来就是清空logs日志文件夹。

比如搬主题有开启防火墙,里面有auditmodsec.log的日志占得很大。在这里建议不要直接用rm删除,可以用如下命令

//当前目录下的auditmodsec.log文件清空
echo "">auditmodsec.log

然后再次用 du -sh * 命令查看文件大小,这些日志占用的空间已经回来了。

再次查看小文件的占用情况,发现 /dev/vda1 竟然还有90%,CPU还是居高不下。只能再次查找相应的文件夹的文件占用情况。找到了session文件夹。该文件夹的绝对位置为/var/lib/php/session/,重点是里面竟然有接近百万个session小文件,用ls命令都卡死半天无法列出来。

将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程插图3

什么是session?

在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。

当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

简单来说,Session就是存储访问用户的信息的。目前存在硬盘上极度占用空间,需要先删除Session文件。

这里说到删除Session文件,可是有接近百万个,用传统的rm命令估计要删上几个小时了。这里搬主题就用了rsync命令进行删除。具体操作如下

1、先安装rsync:

yum install rsync

2、建立一个空的文件夹:

mkdir /tmp/blank

3、用rsync删除目标目录:

rsync --delete-before -a -H -v --progress --stats /tmp/blank/ /var/lib/php/session/

这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也很快。

选项说明:

–delete-before 接收者在传输之前进行删除操作

–progress 在传输时显示传输过程

-a 归档模式,表示以递归方式传输文件,并保持所有文件属性

-H 保持硬连接的文件

-v 详细输出模式 –stats 给出某些文件的传输状态

删除完这些session文件就花了2分钟左右就删除完了。删除完后,系统也恢复正常了,cpu也恢复正常负载。

本次问题的分析:应该是某个时间段主机被攻击,然后造成很多session访问存在硬盘上没有自动清除,每次PHP进行会话时要查找,导致默认的lsphp进程极度占用CPU资源。

这里搬主题觉得很奇怪,为什么PHP的session会话要保存在硬盘上呢,不是安装了缓存吗,应该存储在缓存内才对啊。

接下来就是将lsphp进程session会话存储在Memcached的过程。

三、在BT宝塔面板中设置

如果使用的是BT宝塔面板,这就很简单了,直接在后台的PHP的设置里面,选择session的会话储存位置为Memcached或者Redis里即可。

将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程插图4

四、在OpenLiteSpeed环境中设置

对于使用OpenLiteSpeed环境的小伙伴,或者安装了CyberPanel面板的小伙伴,需要修改默认的php.ini文件。

比如你站点使用过的是PHP 7.4的,那么就要对应修改其PHP 7.4下的php.ini文件。

查找代码:

session.save_handler

如下,其是默认保存在file,也就是硬盘文件中

将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程插图5

将其改为

session.save_handler = 'memcached'

然后查找

session.save_path

发现其中保存在/var/lib/php/session文件夹下。修改为

session.save_path = '127.0.0.1:11211'

然后保存,再重启PHP

原理:PHP 默认的会话处理程序会拖慢大型应用,因为这个处理程序会把会话数据存储在硬盘中,需要创建不必要的磁盘 I/O,浪费时间。我们应该把会话数据保存在内存中,例如可以使用 MemcachedRedis。这么做还有个额外好处 —— 以后便于伸缩。如果会话数据存储在硬盘中,不便于增加额外的服务器,如果把会话数据存放在 MemcachedRedis 里,任何一台分布式 PHP-FPM 服务器都能访问会话数据。

修改后,站点以后的session会话数据都保存在Memcached里了。这样查找起来速度也加快了。实现了将lsphp进程session会话存储在Memcached中加快WordPress网站访问。

 收藏 (0) 赞助

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:搬主题 » 将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程

分享到: 生成海报
版权免责声明

① 本站提供的资源(插件或主题)均为网上搜集,如有涉及或侵害到您的版权请立即通知我们。
② 本站所有下载文件,仅用作学习研究使用,请下载后24小时内删除,支持正版,勿用作商业用途。
③ 因代码可变性,不保证兼容所有浏览器、不保证兼容所有版本的WP、不保证兼容您安装的其他插件。
④ 本站保证所提供资源(插件或主题)的完整性,但不含授权许可、帮助文档、XML文件、PSD、后续升级等。
⑤ 由本站提供的资源对您的网站或计算机造成严重后果的本站概不负责。
⑥ 使用该资源(插件或主题)需要用户有一定代码基础知识!另本站提供汉化使用安装教程,仅供参考。
⑦ 有时可能会遇到部分字段无法汉化,同时请保留作者汉化宣传信息,谢谢!
⑧ 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
⑨ 如果喜欢本站资源,欢迎捐助本站开通会员享受优惠折扣,谢谢支持!
⑩ 如果网盘地址失效,请在相应资源页面下留言,我们会尽快修复下载地址。

评论 抢沙发

评论前必须登录!

立即登录   注册

WordPress主题 插件 建站 汉化

定制服务联系我们
切换注册

登录

点击按钮进行验证

忘记密码 ?

您也可以使用第三方帐号快捷登录

切换登录

注册