如果一个服务不需要session的话,尽量要将session关闭。
作为一名服务端开发者,在现如今敏捷开发的年代,都会选择使用框架来进行开发,但是许多框架有自己的默认配置规则,比如php语言的thinkphp3.2框架,会默认开启session会话。但就是这样一个不起眼的小配置,却可能导致整台服务器出现问题,甚至服务挂掉。
原因如下:
如果你的站点是一个每日请求上百万级规模的接口服务,
每一次请求(这里应该是没有携带cookie的请求)都会在服务端产生一个session会话,也就是一个小文件。
一般而言,php的session文件很小,所以文件本身大小不容易将磁盘打满,
但是,由于请求过于频繁,session文件的个数会暴涨,容易将 inode打满,(inode:存放文件信息的空间)
当inode被打满后,会导致系统无法在硬盘上创建新文件,会使得整个服务在含有创建新文件这一环节崩掉,(比如:Apache pid文件无法创建,等等)
另外,对于服务端运维而言,一旦发现服务器无法正常提供服务,首先是查看各个硬件指标有没有过载,然后查看各个服务组件;所以很难第一时间定位为inode被打满的问题;
解决方法:
1、定位inode被打满,以及定位是session会话文件过多造成的问题,方法如下:
(1)、df -i 查看inode使用量(这一步可以定位是否是inode被打满所导致的问题)
(2)、tree (查看是哪些文件占用过多) (如果上一把成立,这一步可以定位是哪些文件导致inode被打满)
2、处理session会话:
(1)、如果该服务不需要session会话:则关闭session;
(2)、如果该服务需要session会话,建议请求接口的客户端携带cookie,服务端对inode做监控,清理过期的session文件。
另外,关闭session的好处还有:
1、减小服务器的开销
2、session文件过多也会大量占用磁盘