[RUBY-ON-RAILS] 레일 메모리 누출 감지 루비 / 루비
RUBY-ON-RAILS레일 메모리 누출 감지 루비 / 루비
나는 레일에 루비를 사용하여 작은 웹 응용 프로그램을 작성, 그 주요 목적은, 업로드, 저장 및 XML에서 결과를 표시 파일 (파일이 몇 MB까지 가능)하는 것입니다. 약 2 개월 동안 실행 한 후 나는 잡종 프로세스가 4GB의 메모리에 대해 사용 된 것으로 나타났습니다. 나는 루비 메모리 누수 디버깅에 대한 몇 가지 연구를하고 많이 찾을 수 없습니다. 그래서 두 가지 질문이 있습니다.
해결법
-
==============================
1.몇 가지 팁은 레일에서 메모리 누수를 찾을 수 있습니다 :
몇 가지 팁은 레일에서 메모리 누수를 찾을 수 있습니다 :
첫 번째는 오브젝트 공간의 오브젝트에 의한 메모리 사용의 그래픽 탐사입니다.
마지막 두는 메모리 사용을 팽창하는 특정 사용 패턴을 식별하는 데 도움이됩니다, 당신은 거기에서 작업 할 수 있습니다.
특정 코딩 - 패턴에 관해서는, 경험에서 당신은 대규모 문자열 등의 작업, 파일 입출력, 이미지 처리를 다루는 것 아무것도를 볼 수 있습니다.
난 당신이 가장 적절한 XML 라이브러리를 사용하고 있는지 확인하십시오 것 - REXML가 느린 것으로 알려져 있으며 새는 것으로 추정된다 (나는 그것의 증거가 없다!). 또한 비싼 작업을 memoize 수 있는지 여부를 확인합니다.
-
==============================
2.슈퍼 간단한 방법은 후 또는 (전용 리눅스 용) 각 요청하기 전에 메모리 사용량을 기록합니다.
슈퍼 간단한 방법은 후 또는 (전용 리눅스 용) 각 요청하기 전에 메모리 사용량을 기록합니다.
#Put this in applictation_controller.rb before_filter :log_ram # or use after_filter def log_ram logger.warn 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip end
당신은 스크립트 / 콘솔을로드하고 있는지 그것이 당신의 상자에서 작동하기 위해 먼저 문을 시도 할 수 있습니다.
puts 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip
요청이 로그를 확인 가서, 메모리 사용 점프을 할 때 그런 다음, 상단을 모니터링 할 수 있습니다. 당신이 큰 점프가 아닌 작은 단위로 발생하는 메모리 누수가있는 경우는 물론, 단지 도움이 될 것입니다.
-
==============================
3.메모리 누수는이 약을 시작하기에 좋은 장소 현재 루비 구현에 문제가 http://whytheluckystiff.net/articles/theFullyUpturnedBin.html의 웹 사이트가 더 이상 존재하지 않지만 원래의 기사를 여기에서 찾을 수 있습니다 Whytheluckystiff : https://viewsourcecode.org/why/hacking/theFullyUpturnedBin.html
메모리 누수는이 약을 시작하기에 좋은 장소 현재 루비 구현에 문제가 http://whytheluckystiff.net/articles/theFullyUpturnedBin.html의 웹 사이트가 더 이상 존재하지 않지만 원래의 기사를 여기에서 찾을 수 있습니다 Whytheluckystiff : https://viewsourcecode.org/why/hacking/theFullyUpturnedBin.html
루비 프로세스가 볼 오랫동안 실행하는 문제에 대한보다 구체적인 답변 https://just.do/2007/07/18/heap-fragmentation-in-a-long-running-ruby-process/
어쩌면 당신은 시도 https://web.archive.org/web/20130901072209/http://nubyonrails.com/articles/ask-your-doctor-about-mod_rails을 승객 (mod_rails)을 줄 수
-
==============================
4.당신은 루비 교수에 모습을 제공한다.
당신은 루비 교수에 모습을 제공한다.
-
==============================
5.스위치는 JRuby를하고 이클립스 메모리 분석기를 사용합니다. 순간 루비에 대한 비교 도구가 없습니다.
스위치는 JRuby를하고 이클립스 메모리 분석기를 사용합니다. 순간 루비에 대한 비교 도구가 없습니다.
-
==============================
6.지금, 당신은 R이 읽을 수있는 형식으로 메모리를 얻기 위해 다음을 실행할 수 있습니다. 나는 당신의 로그 행이 같다고 가정입니다 :
지금, 당신은 R이 읽을 수있는 형식으로 메모리를 얻기 위해 다음을 실행할 수 있습니다. 나는 당신의 로그 행이 같다고 가정입니다 :
1234567890 RAM USAGE: 27456K
이 프로그램을 실행 (또는 스위트 수정) :
$ grep 'RAM USAGE' fubar.log | awk '{print s " " $1 " " $4; s++}' | sed 's/K//g' > mem.log
그럼 당신은이 작업을 실행할 수 있습니다 :
#!/bin/sh rm -f mem.png R --vanilla --no-save --slave <<RSCRIPT lst <- read.table("mem.log") attach(lst) m = memory / 1024.0 summary(m) png(filename="mem.png", width=1024) plot(date, m, type='l', main="Memory usage", xlab="time", ylab="memory") RSCRIPT
그리고 좋은 그래프를 얻을.
-
==============================
7.나를 위해 일한이 보석 :
나를 위해 일한이 보석 :
MemoryLogic
OINK
from https://stackoverflow.com/questions/161315/ruby-ruby-on-rails-memory-leak-detection by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 루비는 사용자 지정 특성을 가진 f.select 옵션을 레일 (0) | 2020.02.12 |
---|---|
[RUBY-ON-RAILS] 어떻게 루비 레일에 액티브 마이그레이션에 너무 오래 인덱스 이름을 처리 할 수 있습니까? (0) | 2020.02.12 |
[RUBY-ON-RAILS] 레일 4 : before_filter 대 before_action (0) | 2020.02.12 |
[RUBY-ON-RAILS] 레일 다음 respond_to 블록 작업을 수행하는 방법? (0) | 2020.02.12 |
[RUBY-ON-RAILS] 레일에서 참조 열 이동을 추가 4 (0) | 2020.02.12 |