오랜 시간 동안 관리자 였다면 서버가 CPU 사용이나 메모리 사용률 및 / 또는로드 수준에서 급증하는 상황을 확실히 발견 한 것입니다. 'top'을 실행한다고해서 항상 답을 얻을 수있는 것은 아닙니다. 그렇다면 그들을 죽일 수 있도록 시스템 자원을 씹는 교활한 프로세스를 어떻게 찾을 수 있습니까?
다음 스크립트가 도움이 될 수 있습니다. 웹 서버용으로 작성되었으므로 특히 httpd 프로세스를 찾는 일부 부분과 MySQL을 다루는 일부 부분이 있습니다. 서버 배포에 따라 해당 섹션을 주석 / 삭제하고 다른 섹션을 추가하기 만하면됩니다. 시작점으로 사용해야합니다.
이 버전의 스크립트에 대한 전제 조건은 mytop이라고하는 GNU General Public License (
http://jeremy.zawodny.com/mysql/mytop/
)는 MySQL의 성능을 확인하는 환상적인 도구입니다. 늙어 가고 있지만 여전히 우리의 목적에 잘 맞습니다.
또한 메일러로 mutt를 사용합니다. 스크립트를 간단히`mail` 유틸리티에 내장 된 Linux를 사용하도록 변경할 수 있습니다. 매시간 cron을 통해 실행합니다. 적합하다고 생각되는대로 조정하십시오. 아 –이 스크립트는 서버의 일부 보호 영역에서 읽기 때문에 루트로 실행해야합니다.
그럼 시작해 볼까요?
먼저 스크립트 변수를 설정합니다.
#! / Bin / Bash
#
# 시스템 부하 평균 수준을 확인하는 스크립트
# 어떤 프로세스가 과도하게 높은지 ...
#
# 07 7 월 2010 tjones
#
# 환경 설정
dt =`날짜 + % d % b % Y- % X`
# 분명히 다음 디렉토리를 로그 파일이 실제로 보관되는 디렉토리로 변경하십시오.
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysql Log = "/ var / log / mysqld.log"
# 첫 번째 mailstop은 보고서를위한 표준 이메일입니다. 두 번째는 휴대폰 용입니다 (간단한 보고서 포함).
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine =`호스트 이름`
# 다음 세 가지는 mytop 사용을위한 것입니다. 적절한 권한을 가진 db 사용자를 사용하십시오.
dbusr = "사용자 이름"
dbpw = "암호"
db = "데이터베이스 이름"
# 확인해야 할 부하 수준은 다음과 같습니다. 10은 정말 높기 때문에 낮추는 것이 좋습니다.
levelToCheck = 10
다음으로로드 수준을 확인하여 스크립트가 계속되어야하는지 확인합니다.
# 시스템에서 변수 설정 :
loadLevel =`cat / proc / loadavg | awk '{print $1}'`
loadLevel = $ (printf "% 0.f"$ loadLevel)#로드 수준이 원하는 것보다 크면 스크립트 프로세스를 시작합니다. 그렇지 않으면 0을 종료합니다.
[ $loadLevel -gt $levelToCheck ]이면; 그때
echo ""> $ tmpfile
echo "**************************************">> $ tmpfile
echo "날짜 : $ dt">> $ tmpfile
echo "시스템로드 및 프로세스 확인">> $ tmpfile
echo "**************************************">> $ tmpfile