关于php高并发下的session_start()超时 和 session_write_close()
[ 2022-03-11 10:07:36 | 作者: admin ]
今天发现php-fpm有慢语句 session_start()
网上认为是相同浏览器访问相同网站,不同的tab会出现这个问题。
锁了session写入但是能读取。
网上解决方法
在写入完session后立即执行掉 session_write_close()
也就是保存当前session,然后解除锁定。
推论:
此站没有用文件保存session,而是使用了memcached,同样涉及到session锁死的问题
不过高并发下才出现可能是memcached设置的并发量不够
就把原来的1024直接改为4096,运行一段时间看负载情况
另外session赋值结束可以使用 session_commit() ,避免php页执行时间长导致session锁死
下面的例子可以演示 一个调用session的php运行如果没有结束,其它php运行就会一直等待下去,从而php-fpm超时
session-test-1.php
session-test-2.php
参考:https://bbs.csdn.net/topics/370189402
网上认为是相同浏览器访问相同网站,不同的tab会出现这个问题。
锁了session写入但是能读取。
网上解决方法
在写入完session后立即执行掉 session_write_close()
也就是保存当前session,然后解除锁定。
推论:
此站没有用文件保存session,而是使用了memcached,同样涉及到session锁死的问题
不过高并发下才出现可能是memcached设置的并发量不够
就把原来的1024直接改为4096,运行一段时间看负载情况
另外session赋值结束可以使用 session_commit() ,避免php页执行时间长导致session锁死
下面的例子可以演示 一个调用session的php运行如果没有结束,其它php运行就会一直等待下去,从而php-fpm超时
session-test-1.php
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
session_start();
$_SESSION["message"]="我留下的脚印";
// session_commit();
sleep(20);
?>
休息了20秒钟...
</body>
</html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
session_start();
$_SESSION["message"]="我留下的脚印";
// session_commit();
sleep(20);
?>
休息了20秒钟...
</body>
</html>
session-test-2.php
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
session_start();
//session_commit(); //别担心,session_commit()以后,$_SESSION数组的内容还在.
echo $_SESSION["message"]."<br/>";
?>
我等到花儿也谢了
</body>
</html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<?php
session_start();
//session_commit(); //别担心,session_commit()以后,$_SESSION数组的内容还在.
echo $_SESSION["message"]."<br/>";
?>
我等到花儿也谢了
</body>
</html>
参考:https://bbs.csdn.net/topics/370189402
[最后修改由 admin, 于 2022-04-28 14:39:30]
评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2832
这篇日志没有评论。
此日志不可发表评论。