우리는 4 개의 핵심 CPU 생산 시스템을 가지고 있으며 많은 cronjob을 수행하며 일정한 proc queue와 보통 ~ 1.5의로드를 갖습니다.
야간에는 postgres로 IO 집약적 인 작업을 수행합니다. 로드 / 메모리 사용량을 보여주는 그래프를 생성합니다 (rrd-updates.sh) IO로드가 높은 상황에서 "실패"하는 경우가 있습니다. 거의 매일 밤 일어나고 있지만 모든 높은 IO 상황에서는 그렇지 않습니다.
내 "정상적인"솔루션은 postgres를 멋지게 만들고 이온화하고 그래프 생성의 자존심을 높이는 것입니다. 그러나 이것은 여전히 실패합니다. 그래프 생성은 무리를 가진 반 스레드 방지입니다. 실행 시간을 기록하고 그래프 생성의 경우 IO로드가 높을 때 최대 5 분이며 최대 4 분 동안 그래프가 누락 된 것 같습니다.
기간은 postgres 활동과 정확히 일치합니다 (이것은 때때로 그렇게 자주 발생하지는 않지만 종종 발생합니다) 실시간 prio까지 이온화 (C1 N6 graph_cron 대 C2 N3 postgres) )로 문제가 해결되지 않았습니다.
데이터가 수집되지 않는다고 가정하면 추가 문제는 ionice / nice가 여전히 작동하지 않는 것입니다.
90 % IOwait와 100i의로드에서도 5 초 이상의 지연없이 (적어도 테스트시) 데이터 생성 명령을 자유롭게 사용할 수있었습니다.
슬프게도 테스트에서 정확하게 재현 할 수 없었습니다 (가상화 된 dev 시스템 만 있음)
버전 :
커널 2.6.32-5-686-bigmem
데비안 스퀴즈 rrdtool 1.4.3
하드웨어 : 하드웨어 RAID1
마운트 옵션에 LVM이있는 SAS 15K RPM HDD : ext3 with rw, errors = remount-ro
스케줄러 : CFQ
crontab :
* * * * * root flock -n /var/lock/rrd-updates.sh nice -n-1 ionice -c1 -n7 /opt/bin/rrd-updates.sh
rrdcache에 대한 github의 Mr Oetiker의 관련 버그가있는 것 같습니다 :
https://github.com/oetiker/rrdtool-1.x/issues/326
이것은 실제로 내 문제 (동시 쓰기) 일 수 있지만 cronjob이 실패하지 않는다고 설명하지는 않습니다. 가정에서 실제로 2 개의 동시 쓰기 flock -n
가 종료 코드 1 (테스트에서 확인 된 맨 페이지 당)을 반환합니다. 출력과 함께 전자 메일을 얻지 못하기 때문에 cronjob이 실제로는 다른 시간마다 정상적으로 실행된다는 관찰 어떻게 든 잃었다.
출력 예 :
의견을 바탕으로 업데이트 스크립트의 중요한 소스를 추가했습니다.
rrdtool update /var/rrd/cpu.rrd $(vmstat 5 2 | tail -n 1 | awk '{print "N:"$14":"$13}')
rrdtool update /var/rrd/mem.rrd $(free | grep Mem: | awk '{print "N:"$2":"$3":"$4}')
rrdtool update /var/rrd/mem_bfcach.rrd $(free | grep buffers/cache: | awk '{print "N:"$3+$4":"$3":"$4}')
무엇을 놓치거나 어디서 더 확인할 수 있습니까?
기억하십시오 : 생산적인 시스템이므로 개발, 스택 추적 또는 유사성이 없거나 설치 가능하지 않습니다.
cron
캡처 STDERR의 아무 곳은? FreeBSD의 나는 보통이 아래를 실행에 periodic every5
및 나는이 /var/log/periodic.every5
일반적으로 오류를 캡처하는. 또한 세 개의 스크립트를 비틀고 순서가 바뀌어 특정 스크립트가 중단되는지 확인합니다. 내 RRDTool 경험의 대부분은 cricket
자체 로깅 기능이었습니다. cricket
로그는 문제를 찾기위한 우수했다. 당신은 정말 매분 수집하고 있습니까? (* / 5 * * * * 대신 * * * * *) 그래프의 단위는 무엇입니까? RRD의 기본값은 5 분입니다.