티스토리 뷰

<?

/*

가끔 보면 MySQL 프로세스중 Sleep 상태에서 아무일도 하지않고 오랫동안 머무는 좀비프로세스들이 보일때가 있습니다.

처음 맞닥들이면 이게 출처가 어디인지 막막해서 좀 난감합니다.


이럴때 차근차근 추적해나가는 많은 방법중 한가지를 소개합니다.


1. 아래 코드를 좀비프로세스를 생성해내는것으로 의심되는 PHP스크립트에 넣는다

2. mysqli_connect 혹은 mysql_connect 로 접속을 하고나서 반환받은 포인터를 ps_tracking(포인터); 의 인자로써 넣어서 실행하도록 한다.

3. MySQL 에서 SHOW PROCESSLIST 로 확인하다가 좀비프로세스가 만들어지면 그것의 프로세스ID 를 확인한다.

4. 확인된 프로세스ID 를가지고 기록해둔 로그를 탐색해본다.

   find /home/user/log/ -name * -exec cat {} | grep "^프로세스아이디" \;

5. 탐색되면 해당 부분에서 문제를 찾아보면 된다. 탐색되지 않는다면 PHP스크립트가 아닌 다른 부분을 의심해본다.


이 방법은 MySQL에 접속하는 모든 클라이언트에서 사용될 수 있습니다. (다만 조금씩 클라이언트의 환경이 다를테니 남기게 되는 로그내용도 알맞게 정해주세요)

*/


function ps_tracking($db_pointer)

{

$log_path = ps_track_util("path");

clearstatcache();

if(is_dir($log_path) && $db_pointer)

{

$thread_id = mysql_thread_id($db_pointer);

if($thread_id)

{

$thread_id = $thread_id."";


// 로그 남길 내용들을 여기서 정해주면됩니다

// 길잃은 프로세스를 찾을때 중요한 정보는 어떤 스크립트에서 어떤요청이 들어왔을때 인지를 아는것이 중요할것입니다.

// 여기서 "어떤요청" 에 대해 자세히 나누자면 주로 GET, POST 등으로 들어오는 외부값과 Request Header 로 들어오는 값들입니다

// PHP 에서 Request Header 는 $_SERVER 에 예쁘게 담겨있으며 phpinfo(); 해보면 뭐가 뭔지 잘 알수 있습니다.

$data = Array();

$data[] = $thread_id;

$data[] = $_SERVER["HTTPS"];

$data[] = $_SERVER["REMOTE_ADDR"];

$data[] = $_SERVER["REQUEST_URI"];

$data[] = ps_track_util("post");

$data[] = $_SERVER["HTTP_USER_AGENT"];


// 그룹을 정해주는 이유는 파일 한개에 동시다발적으로 쓰기가 시도되게되면 파일이 엉망이 됨

// 이렇게 하면 4096개로 쪼개지는데 접속이 무지무지 많으면 4096으로도 부족할수도 있으므로 그때는 로그기록방법을 달리해주세요

$group = substr(md5($thread_id), 0, 3);

$ff=fopen($log_path.$group, "a");

fwrite($ff, join("\t", $data)."\n");

fclose($ff);

}

}

}

function ps_track_util($mode)

{

global $_GET, $_POST;

$rtn = "";

$log_path = "/home/user/log/"; // 로그를 기록하고자 하는 경로를 정해준다

if($mode === "path")

{

$rtn=$log_path;

}

else if($mode === "get" || $mode === "post")

{

$arr = $mode==="get"?$_GET:$_POST;

$lst = Array();

foreach($arr as $key => $value)

{

$lst[]=$key."=".$value;

}

$rtn = join("&", $lst);

}

return $rtn;

}

?>

댓글
댓글쓰기 폼
공지사항
Total
31,314
Today
13
Yesterday
23
링크
«   2018/10   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함