복붙노트

[RUBY-ON-RAILS] 레일 메모리 누출 감지 루비 / 루비

RUBY-ON-RAILS

레일 메모리 누출 감지 루비 / 루비

나는 레일에 루비를 사용하여 작은 웹 응용 프로그램을 작성, 그 주요 목적은, 업로드, 저장 및 XML에서 결과를 표시 파일 (파일이 몇 MB까지 가능)하는 것입니다. 약 2 개월 동안 실행 한 후 나는 잡종 프로세스가 4GB의 메모리에 대해 사용 된 것으로 나타났습니다. 나는 루비 메모리 누수 디버깅에 대한 몇 가지 연구를하고 많이 찾을 수 없습니다. 그래서 두 가지 질문이 있습니다.

해결법

  1. ==============================

    1.몇 가지 팁은 레일에서 메모리 누수를 찾을 수 있습니다 :

    몇 가지 팁은 레일에서 메모리 누수를 찾을 수 있습니다 :

    첫 번째는 오브젝트 공간의 오브젝트에 의한 메모리 사용의 그래픽 탐사입니다.

    마지막 두는 메모리 사용을 팽창하는 특정 사용 패턴을 식별하는 데 도움이됩니다, 당신은 거기에서 작업 할 수 있습니다.

    특정 코딩 - 패턴에 관해서는, 경험에서 당신은 대규모 문자열 등의 작업, 파일 입출력, 이미지 처리를 다루는 것 아무것도를 볼 수 있습니다.

    난 당신이 가장 적절한 XML 라이브러리를 사용하고 있는지 확인하십시오 것 - REXML가 느린 것으로 알려져 있으며 새는 것으로 추정된다 (나는 그것의 증거가 없다!). 또한 비싼 작업을 memoize 수 있는지 여부를 확인합니다.

  2. ==============================

    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. ==============================

    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. ==============================

    4.당신은 루비 교수에 모습을 제공한다.

    당신은 루비 교수에 모습을 제공한다.

  5. ==============================

    5.스위치는 JRuby를하고 이클립스 메모리 분석기를 사용합니다. 순간 루비에 대한 비교 도구가 없습니다.

    스위치는 JRuby를하고 이클립스 메모리 분석기를 사용합니다. 순간 루비에 대한 비교 도구가 없습니다.

  6. ==============================

    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. ==============================

    7.나를 위해 일한이 보석 :

    나를 위해 일한이 보석 :

    MemoryLogic

    OINK

  8. from https://stackoverflow.com/questions/161315/ruby-ruby-on-rails-memory-leak-detection by cc-by-sa and MIT license