mysql 재시작 쉘스크립트에 작성중 질문드립니다.
현재 회사에서 서비스 해주고 있는 웹사이트에
DB쪽에 부하가 많이 걸려서 (slow query 때문으로 추정됨)
프로그램(php)쪽이나 장비쪽(DB와 웹서버는 내부 네트웍)으로
어느정도 해소는 되었으나 퇴근후에 디비 서버가
프로세스가 90% 이상으로 올라가서 버티지 못하는 사태가
가끔 있습니다. 따로 서버 관리자가 없기에 대응하는 시간이
늦어질수밖에 없지요. 그래서 cron으로 5분간격으로 쉘스크립트를
짜서 mysql 프로세서가 90% 이상이면 재시작하는
스크립트를 작성하려고 하는데.. 잘 안되서 조언을 구합니다.
생각은.. top 실행결과를 받아서.. 전체 라인수 만큼
반복문을 돌리고 한줄씩 awk로 검사해서 mysql 문자열이
있으면(또는 mysql.pid 화일의 pid값이 일치하는 라인)이면
프로세스 점유율 %를 지정한 수치와 비교해서
90% 이상이면 mysql 재시작.. 대충 이럽습니다.
#!/bin/sh
# top result from total for loop line
top_array="`wc top.txt | awk '{print $1}'`"
echo $top_array;
while [ "$top_array" -gt "0" ]; do
top_array=$(($top_array-1))
done
-----------------------------------------------
top의 실행결과의 txt 화일로 테스트중인데
라인수만큼 루핑을 돌릴수는 있겠는데..
화일이나 입력인자를 한줄씩 검사하는 부분이
도저히 해결이 안되네요. php로 하면
금방 되겠는데. 쉘스크립트는 생소해서요..
한줄씩 읽어오는 부분만 되면 나머지 비교하는
부분과 재시작 하는 부분은 될듯합니다만..
고수님들의 조언을 바랍니다.
감기조심하시고 항상 행복하시길...
top대신 ps를 사용하여...
ps -o user,%cpu,cmd -e | awk '/^mysql/ {s += $2} END {print s}'
하시면, mysql이라는 사용자로 얼마나 많은 cpu를 잡아먹고 있는지를 보여줍니다.
혹시, mysql이라는 사용자로 mysql데몬을 띄우는 외에, 다른 작업이 있다면,
/^mysql/ 이것을 적절하게 바꿔주면 되겠죠...
과자가 아닙니다.
cuckoo dozen, 즉.12마리의 뻐꾸기란 뜻입니다.
답변 감사드립니다. 며칠동안 앓던 이처럼 답답했는데..CPUID=
답변 감사드립니다. 며칠동안 앓던 이처럼 답답했는데..
CPUID=$(ps -aux | grep `cat /sql/***.com.pid` | awk '{s += $3} END {print s}')
발상의 전환을 하니 쉽게 해결됐습니다..
행복하세요
댓글 달기