우리 앞에 서버 이있는 mongrel_cluster 인스턴스가 10 개 실행되는 서버가 있으며, 그 중 하나 또는 일부가 중단됩니다. 데이터베이스에서 활동이 보이지 않습니다 (우리는 activerecord 세션을 사용 중입니다). innodb 테이블이있는 mysql. show innodb status는 잠금을 보여주지 않습니다. 프로세스 목록에 아무 것도 표시되지 않습니다.100 % CPU/EBADF (잘못된 파일 설명자)로 잡동사니가 있습니다.
서버 리눅스 데비안 4.0
루비이다 루비 1.8.6 (2008-03-03 패치 레벨 114)을 i486 리눅스]
레일이다 레일 1.1.2 (예, 아주
,691,363 : 오래된) 우리는 기본 MySQL의 커넥터를 사용하고는 (보석 프로세스 중단 잡종에 대한 루프에서 다음
"strace를 -p PID는"제공) MySQL을 설치 나는 예를 에 대해 결정할 수
나는이 디버깅 할 수있는 다른 방법이 있나요 그래서 |210
gettimeofday({1219834026, 235289}, NULL) = 0
select(4, [3], [0], [], {0, 905241}) = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 235477}, NULL) = 0
select(4, [3], [0], [], {0, 905053}) = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 235654}, NULL) = 0
select(4, [3], [0], [], {0, 904875}) = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 235829}, NULL) = 0
select(4, [3], [0], [], {0, 904700}) = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 236017}, NULL) = 0
select(4, [3], [0], [], {0, 904513}) = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 236192}, NULL) = 0
select(4, [3], [0], [], {0, 904338}) = -1 EBADF (Bad file descriptor)
gettimeofday({1219834026, 236367}, NULL) = 0
...
내가 lsof를 사용하고 프로세스가 (화장실 -l -p PID lsof를) 67 개 파일 디스크립터를 사용하는 것을 발견 어떤 파일 기술자가 "불량"입니까? 다른 정보 또는 제안 사항이 있으십니까? 이걸 본 사람?
사이트가 상당히 많이 사용되지는 않지만 부하 평균은 보통 0.3입니다.
일부 추가 정보. 걸린 프로세스가 무엇을하고 있었는지 보여주기 위해 mongrelproctitle을 설치했으며, 데이터베이스의 file_column/images를 사용하는 이미지 / rmagick을 사용하여 이미지의 크기를 조정하고 이미지를 회색조로 표시하는 방법 에 매달려있는 것으로 보입니다.
결론적이지 않은 것은 문제이지만 여기에는 의문이 있습니다. 분명히 다음과 같은 문제가 있습니까? 메서드는 주문에 이미지가 포함되어 있지 않으면 정적 이미지를 표시하고 그렇지 않은 경우 이미지는 주문에서 크기가 조정됩니다. 캐시 내용은 매번 브라우저에서 이미지가 으로 업데이트되도록합니다. 이미지는 일반 이미지 태그 인 페이지에 삽입됩니다.
코드 : 여기
def preview_image
@order = session[:order]
if @order.image.nil?
@headers['Pragma'] = 'no-cache'
@headers['Cache-Control'] = 'no-cache, must-revalidate'
send_data(EMPTY_PIC.to_blob, :filename => "img.jpg", :type =>
"image/jpeg", :disposition => "inline")
else
@pic = Image.read(@order.image)[0]
if (@order.crop)
@pic.crop!(@order.crop[:x1].to_i, @order.crop[:y1].to_i,
@order.crop[:width].to_i, @order.crop[:height].to_i, true)
end
@pic.resize!(103,130)
@pic = @pic.quantize(256, Magick::GRAYColorspace)
@headers['Pragma'] = 'no-cache'
@headers['Cache-Control'] = 'no-cache, must-revalidate'
send_data(@pic.to_blob, :filename => "img.jpg", :type =>
"image/jpeg", :disposition => "inline")
end
end
는 사람이 어떤 문제를 발견 할 수있는 경우 lsof의 출력입니다. 내가 서버를 모니터링 할 수 MONIT를 설치 한
lsof: WARNING: can't stat() ext3 file system /dev/.static/dev
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mongrel_r 11628 username cwd DIR 9,2 4096 1870688
/home/domains/example.com/usernameOrder/releases/20080831121802
mongrel_r 11628 username rtd DIR 9,1 4096 2/
mongrel_r 11628 username txt REG 9,1 3564 167172
/usr/bin/ruby1.8
mongrel_r 11628 username mem REG 0,0 0
[heap] (stat: No such file or directory)
mongrel_r 11628 username DEL REG 0,8 15560245
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560242
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560602
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560601
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560684
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560683
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560685
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560568
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560607
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560569
/dev/zero
mongrel_r 11628 username mem REG 9,1 1933648 456972
/usr/lib/libmysqlclient.so.15.0.0
mongrel_r 11628 username DEL REG 0,8 15442414
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560546
/dev/zero
mongrel_r 11628 username mem REG 9,1 67408 457393
/lib/i686/cmov/libresolv-2.7.so
mongrel_r 11628 username mem REG 9,1 17884 457386
/lib/i686/cmov/libnss_dns-2.7.so
mongrel_r 11628 username DEL REG 0,8 15560541
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560246
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560693
/dev/zero
mongrel_r 11628 username DEL REG 0,8 15560608
/dev/zero
mongrel_r 11628 username mem REG 9,1 25700 164963
/usr/lib/gconv/gconv-modules.cache
mongrel_r 11628 username mem REG 9,1 83708 457384
/lib/i686/cmov/libnsl-2.7.so
mongrel_r 11628 username mem REG 9,1 140602 506903
/var/lib/gems/1.8/gems/mysql-2.7/lib/mysql.so
mongrel_r 11628 username mem REG 9,1 1282816 180935
...
mongrel_r 11628 username 1w REG 9,2 462923 1575329
/home/domains/example.com/usernameOrder/shared/log/mongrel.8001.log
mongrel_r 11628 username 2w REG 9,2 462923 1575329
/home/domains/example.com/usernameOrder/shared/log/mongrel.8001.log
mongrel_r 11628 username 3u IPv4 15442350 TCP
localhost:8001 (LISTEN)
mongrel_r 11628 username 4w REG 9,2 118943548 1575355
/home/domains/example.com/usernameOrder/shared/log/production.log
mongrel_r 11628 username 5u REG 9,1 145306 234226
/tmp/mongrel.11628.0 (deleted)
mongrel_r 11628 username 7u unix 0xc3c12480 15442417
socket
mongrel_r 11628 username 11u REG 9,1 50 234180
/tmp/CGI.11628.2
mongrel_r 11628 username 12u REG 9,1 26228 234227
/tmp/CGI.11628.3
... 그것은이 메시지에서 포맷하는 방법을 모르는 마십시오. PID 파일 문제로 인해 자동으로 다시 시작하지는 않지만 부실 PID 파일 삭제를 지원하는 최신 버전을 구할 수 있습니다.
서버를 항상 다시 시작해야하는 경우 (예 : 하루에 10 번)
mongrel 프로세스가 큰 크기를 차지하지 않으면 실제로 문제를 해결하는 것이 좋습니다. 이 상황이 발생할 때의 메모리 양과 컴퓨터가 스와핑을하지 않기 때문에 아마도 메모리 누수가 아닙니다. 책 배포 레일 응용 프로그램에서
total used free shared buffers cached
Mem: 4152796 4083000 69796 0 616624 2613364
-/+ buffers/cache: 853012 3299784
Swap: 1999992 52 1999940
사용중인 Image Magick의 버전은 무엇입니까? –