CodeIgniter - ses_destroy()使用了很多CPU

时间:2011-04-16 19:27:38

标签: mysql session codeigniter

我有一个用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运行。我怎么能看到它在做什么,为什么?

1 个答案:

答案 0 :(得分:2)

在黑暗中拍摄(如果您确定此功能导致缓慢):

首先,您可以打开MySQL的慢查询日志:

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

然后,如果$sess_use_databaseTRUE,您可以尝试优化会话表。你可能会遇到一些问题。

除此之外,我唯一能想到的是你的数据库服务器存在问题。您可以尝试运行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
            );
}