질문 Q #23600
Fatal error 관련하여 여쭙고자 합니다.
멀바이자시가 2021-08-31 16:06:16

안녕하세요? 다름이 아니라 아파치 로그를 살펴보는 중 Fatal error 가 심심치 않게 발견되어 고수님들께 여쭙고자 합니다.

PHP Fatal error:  Call to a member function row() on a non-object in ~/system/libraries/Session/drivers/Session_database_driver.php on line 396, referer: ~

위와 같이 에러건이 많이 발생하며 해당 라이브러리에서 396 줄은 하단에 11번째 줄입니다.

protected function _release_lock()
	{
		if ( ! $this->_lock)
		{
			return TRUE;
		}

		if ($this->_platform === 'mysql')
		{
			if ($this->_db->query("SELECT RELEASE_LOCK('".$this->_lock."') AS ci_session_lock")->row()->ci_session_lock)
			{
				$this->_lock = FALSE;
				return TRUE;
			}

			return FALSE;
		}
		elseif ($this->_platform === 'postgre')
		{
			if ($this->_db->simple_query('SELECT pg_advisory_unlock('.$this->_lock.')'))
			{
				$this->_lock = FALSE;
				return TRUE;
			}

			return FALSE;
		}

		return parent::_release_lock();
	}

RELEASE_LOCK 으로 풀린 row() 를 찾을 수 없어서 Call to a member function row() on a non-object 이게 뜨는걸까요?

혹시 이 에러로 인해 서버 CPU 점유율이 100% 가까이 갈수도 있는걸까요?

해당 에러에 대해 많은 정보가 없어 고수님들께 도움 요청 드립니다. ㅜㅜ

참고로 PHP 5.3.3 / Apache/2.2.15 (Unix) 입니다. config 세션 설정은 하단입니다.

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';

 

답변 2
#1 변종원(웅파) 2021-09-01 09:50:50

ci버전은요? 3점대로 보이는데 최신버전이 아니라면 3점대 최신버전으로 패치해보세요.

동접수는 얼마나 되나요? 동접이 많은 사이트에서 db 세션은 서버부하가 일어날 수 있습니다. db 락도 문제가 될 수 있구요. (데드락)

구글에서 mysql 데드락 한번 검색해보세요.

#2 멀바이자시가 2021-09-01 12:26:08

넵. 웅파님 답변 감사드립니다.

데드락 관련해서 한번 찾아봐야겠네요.