我有一个用CodeIgniter编写的Web应用程序,而且大多数情况下看起来都很合理。但是,当用户注销时,我注意到了极高的CPU使用率。我的auth控制器中的注销功能如下:
function logout()
{
$goto = $SERVER['HTTP-REFERER'];
$this->session->sess_destroy();
if (!$goto)
$goto = "/";
header('location: '.$goto);
}
通常情况下,这是非常好的和快速的。奇怪的是,当链接到来自特定子页面的 时,这个函数大约需要5-6秒我的mysqld以100%cpu运行。我怎么能看到它在做什么,为什么?
答案 0 :(得分:2)
在黑暗中拍摄(如果您确定此功能导致缓慢):
首先,您可以打开MySQL的慢查询日志:
http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
然后,如果$sess_use_database
为TRUE
,您可以尝试优化会话表。你可能会遇到一些问题。
除此之外,我唯一能想到的是你的数据库服务器存在问题。您可以尝试运行MySQL Tuner,看看您是否可以改进一下:
https://github.com/rackerhacker/MySQLTuner-perl
希望有所帮助!
<强> FYI 强>
以下是OP运行sess_destroy()
时运行的代码(来自v2.0.2):
/**
* Destroy the current session
*
* @access public
* @return void
*/
function sess_destroy()
{
// Kill the session DB row
if ($this->sess_use_database === TRUE AND isset($this->userdata['session_id']))
{
$this->CI->db->where('session_id', $this->userdata['session_id']);
$this->CI->db->delete($this->sess_table_name);
}
// Kill the cookie
setcookie(
$this->sess_cookie_name,
addslashes(serialize(array())),
($this->now - 31500000),
$this->cookie_path,
$this->cookie_domain,
0
);
}