我有一个基于 Joomla 1.5.10 的 Intranet 系统。有时我们会看到数据库线程数过高,性能下降。当我检查管理员部分时,我只能看到登录用户的数量。这些数字仅在 1000-5000 之间。执行以下查询以查找并发活跃用户是否正确:
select count(*) from jos_session;
例如,如果我执行上面的查询并通过管理员查看登录用户,则数据如下:
select count(*) from jos_session; = 2628
logged-in users visible from admin section = 1545
两个结果彼此不匹配。另外,一次在我的系统中找到并发/事件用户的最佳方法是什么?
最佳答案
我认为仅通过分析 __session
你不会得到你需要/想要的信息。 如果你需要了解你在后端看到的内容,请检查模块位于:
管理员\modules\mod_status\mod_status.php
列出了所有查询。重要的是要了解 guest
是未经身份验证的用户,也是 client_id(前端(0)VS 后端身份验证(1))。
事情是这样的:
jos_session
存储所有未过期的session- 可能您有一个 SSO 身份验证机制,这意味着如果用户关闭并再次打开浏览器,它可能会获得一个新的 session ID。拥有比用户更多的
事件
session ,这是 session 过期时间设置过高的明显标志。
只需对 jos_session
进行查询:
SELECT `username`, count(username) FROM `jos_session` WHERE 1 GROUP BY `username`
如果太多用户的 count
值太大,请缩短 session 生命周期。
通过这种方式,您可以更准确地了解某个时间系统中有多少用户,但这只是一个 session ,它不会为您提供有关有多少用户实际执行操作的确切信息在一个网站上。
用简单的英语来说就像是说:我知道在最后 [FILL IN SESSION LIFETIME] 分钟内有 1500 个用户打开了 Intranet。
您需要了解数据库线程究竟是如何生成的以及为什么值很高。
基本上,引用 documentation , 一旦脚本执行结束,与服务器的链接将立即关闭,除非通过显式调用 mysql_close() 提前关闭。
如果您有类似 JavaScript 的东西,用 AJAX 请求轮询您的服务器以获取一些信息,这可能值得检查,即使用户只是打开浏览器,它也可能运行。
希望这在某种程度上有所帮助。
关于php - Joomla 1.5 : How to find number of concurrent/active users in my joomla based intranet system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20487208/