PHP共享内存分配(mm,编译-带毫米)会话模块是什么?
你用过吗?你测试过了吗?效果好吗?你有会话锁定问题吗?
在使用文件或自定义会话处理程序(如数据库)时,很容易查看会话数据的内容,但是否可以使用此模块查看会话数据?想查看会话数据的个人原因是:(1)测试PHP垃圾收集是否正常工作;(2)确保它没有占用所有系统内存。
我认为它曾经是一个单独的(PECL?Zend?)扩展,但现在它在核心。
将其编译为PHP二进制文件的唯一要求是OSSP毫米报头,这是一个较小的330 k下载。
$ ./configure --help
// --with-mm=DIR SESSION: Include mm support for session storage
我唯一能找到的信息来自2006年的一篇留言板文章,其中提到了一个现在失踪的Zend会话教程页[404],作者引用了这篇文章的话:
如果您需要更高的性能,则mm模块是可行的替代方案;它将数据存储在共享内存中,因此不受硬件I/O系统的限制。
我知道其中两个是局限性
(1)请注意,mm的会话存储模块不能保证正确锁定对同一会话的并发访问。使用基于共享内存的文件系统(如Solaris/Linux上的tmpfs或BSD上的/dev/md )来将会话存储在文件中可能更合适,因为会话是正确锁定的。(2)会话数据存储在内存中,web服务器重新启动删除。
我真的想要一个规范的描述,但是任何和所有的信息都是非常感谢的。
发布于 2020-04-19 08:47:58
我没有在会话中使用共享内存,但最近我一直在使用https://www.php.net/manual/en/book.shmop.php,这似乎是会话所使用的。
共享内存最棒的一点是,它是在进程之间共享数据的一种疯狂的快速方式。这样做的代价是,由于您只是直接存储在内存中,所以无法控制谁在何时(并且它不是持久的)写东西。使用内存文件系统中的文件会话来修复这个问题,这就是在上面添加文件系统层(REDIS和memcached也处理这个问题)。
如果您为您的会话编写了大量内容,并且有合理的机会同时运行两个请求,那么您将在某个时候得到意外的数据。不管这是什么问题,问题在于您需要在多大程度上依赖您的会话数据。
如果您只写了一次,然后就全部读取了,就像在登录时存储一个用户id一样,那么它就会工作得很好。
关于GC,会话模块之间应该没有区别。
https://stackoverflow.com/questions/18337159
复制相似问题