使用阿里云NAS做PHP共享session的坑

使用阿里云NAS做PHP共享session的坑
 
项目上线后,发现负载均衡下的每台web服务器负载均很高,但是CPU利用率确是不高。因为web代码是PHP开发的,从CPU利用率看出来代码应该没有什么问题,极有可能是由于IO等待导致每个php执行时间太长,导致任务堆积。
然后打开PHP的慢日志,问题就清楚了,原来性能卡在session上。 

script_filename = /data0/www/***/public/index.php
[0x00007f2543d5abd8] flock() /data0/www/***/public/system/libraries/Session/drivers/Session_files_driver.php:178
[0x00007ffe9a3ebee0] read() unknown:0
[0x00007f2543d5a338] session_start() /data0/www/***/public/system/libraries/Session/Session.php:143
[0x00007f2543d591d8] __construct() /data0/www/***/public/system/core/Loader.php:1285
[0x00007f2543d58208] _ci_init_library() /data0/www/***/public/system/core/Loader.php:1178
[0x00007f2543d57728] _ci_load_stock_library() /data0/www/***/public/system/core/Loader.php:1043
[0x00007f2543d56dd0] _ci_load_library() /data0/www/***/public/system/core/Loader.php:1089
[0x00007f2543d564a8] _ci_load_library() /data0/www/***/public/system/core/Loader.php:218
[0x00007f2543d560e8] library() /data0/www/***/public/system/core/Loader.php:202
[0x00007f2543d55d50] library() /data0/www/***/public/system/core/Loader.php:1359
[0x00007f2543d553c0] _ci_autoloader() /data0/www/***/public/system/core/Loader.php:157
[0x00007f2543d55290] initialize() /data0/www/***/public/system/core/Controller.php:79
[0x00007f2543d54f60] __construct() /data0/www/***/public/application/controllers/api/Home.php:15
[0x00007f2543d54c70] __construct() /data0/www/***/public/system/core/CodeIgniter.php:518
[0x00007f2543d524a8] +++ dump failed

NAS相对于本地磁盘,还多了一层网络通讯,因此性能会比本地磁盘更慢。
OK,共享session除了利用NFS进行文件共享的方式外,还可以使用memcache和redis,后来我们使用redis作为共享session,问题解决。虽然redis也是需要通过网络,但是最终数据写入内存,这个时间比落入磁盘不是同一个数量级。

不过,由于CI3是自己实现的文件session方式,主要慢在对session进行flock,以及gc删除过期session上(遍历session目录,然后删除过期文件)。那么对php session是否有影响呢?
参考了php官方的文档:原生的session是有锁和gc机制的。

后记:
按照阿里云对NAS文件系统的产品文档介绍,性能型的ssd应该不会出现IO瓶颈才对。而且在NAS的监控看到IOPS其实并不高
后来在看到这个说明:https://help.aliyun.com/knowledge_detail/53839.html?spm=a2c4g.11186623.4.7.jXaKcm


总结:
虽然最后找到NFS做共享session慢的原因,但是NFS也不适合做共享session,最好还是通过memcache和redis来实现。NFS最好用FTP或下载盘使用,这种使用率不高的可以用用。

转载于:https://my.oschina.net/7795442/blog/3080242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值