将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,浪费时间。我们应该把会话数据保存在内存中,例如可以使用 Memcached 或 Redis。这么做还有个额外好处 —— 以后便于伸缩。如果会话数据存储在硬盘中,不便于增加额外的服务器,如果把会话数据存放在 Memcached 或 Redis 里,任何一台分布式 PHP-FPM 服务器都能访问会话数据。

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

原文来自:搬主题

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

 收藏 (0) 打赏

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

支付宝扫一扫赞助

微信钱包扫描赞助

虾皮路版权所有,未经允许不得转载:虾皮路 » 将lsphp进程session会话存储在Memcached中加快WordPress网站访问图文教程
分享到: 生成海报

热门文章

评论 抢沙发

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
切换注册

登录

点击按钮进行验证

忘记密码 ?

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

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活