タグ

ブックマーク / watson.hatenablog.com (7)

  • ObjectSpace を利用して Ruby 製 worker のメモリ使用量を改善した - @watson1978 の日記

    現在、Ruby 製 worker を作成することを業務で行っているのですが、継続的にメモリ使用量が増加する現象に遭遇してました。 (グラフの値が下がったタイミングが数回ありますが、それぞれでデプロイが行われてリセットされただけ) ObjectSpace.allocation_sourcefile や ObjectSpace.allocation_sourceline を利用してどのファイルのどの行でメモリ確保が多くなるのか調べれるようにしました。 以下のようなコードを worker に追加しました。 require 'objspace' class MemoryProfiler INTERVAL = 5 * 60 DISPLAY_COUNT = 20 def self.start Thread.start do loop do memory_usages = {} ObjectSpace.

    ObjectSpace を利用して Ruby 製 worker のメモリ使用量を改善した - @watson1978 の日記
    iga_k
    iga_k 2023/08/03
    watsonsさんの、よくわからないメモリリークを追跡するツール。すごい。
  • RMagick のメモリ使用量を改善した - @watson1978 の日記

    【追記 2019/06/17】パッチを含んだ RMagick v3.2.0 がリリースされました。 RMagick を使用すると馬鹿みたいにメモリ使用量があがると言われ続けてましたが、修正方法の見込みがたちようやく直しました。 何が起きていたか RubyKaigi 2019 で登壇した際にも話しましたが、RMagick が引き起こしていた多数のメモリリークは修正済み だったので、Ruby の GC が動作すると抱え込んでいる不要なメモリ領域は解放されていました。 問題は Ruby の GC がなかなか動作してくれないことにありました。例えば RMagick で画像用のオブジェクトを生成しても、サイズはたかだか 40 bytes しかありません。 require 'rmagick' require 'objspace' img = Magick::Image.new(1000, 1000)

    RMagick のメモリ使用量を改善した - @watson1978 の日記
    iga_k
    iga_k 2019/06/16
    強い!!偉業。
  • Xcode 9 で iprofiler が使えなくなっていた・・・(´д`) - @watson1978 の日記

    以前、macOS 上で Ruby のパフォーマンスを計測する で iprofiler を使ったパフォーマンス計測方法を書いたのですが、Xcode 9 で $ iprofiler -timeprofiler ./a.out iprofiler error: DTPerformanceSession: Authorization failure. とエラーが出るようになってた。 よく分からないし、あきらめて instruments コマンドを使うようにした。以下のような感じで使う。 $ instruments -l 10000 -t "Time Profiler" ./a.out iprofiler みたいに 10 秒経過したら自動で終了しないので、必要なら -l でリミットをミリ秒単位で指定する。-t では計測に使用するテンプレートを指定する必要があるが、instruments -s で表示

    Xcode 9 で iprofiler が使えなくなっていた・・・(´д`) - @watson1978 の日記
    iga_k
    iga_k 2019/05/03
    macで使えるプロファイルツール instruments
  • Xcode を使って Ruby C 拡張ライブラリをデバッグ - @watson1978 の日記

    RMagick のテストが通らないものを調べる際にどのようにデバッグしようかと思ったのですが、Debugging Ruby C Extensions in XCode - Emil Soman's blog に有益なことが書かれておりました。元の記事では Xcode 5.1 が使われていたので最新の Xcode のスクリーンショットを交えつつ手順を書いてみます。 この記事では Ruby C 拡張ライブラリの C 言語で書かれたコードをデバッグする手法を記述します。 デバッグ対象のコードを入手 $ git clone https://github.com/rmagick/rmagick.git Makefile を作成 Ruby C 拡張ライブラリの C 言語のコードは ext ディレクトリ配下にあります。RMagick では ext/RMagick となります。そこへ移動し Makefil

    Xcode を使って Ruby C 拡張ライブラリをデバッグ - @watson1978 の日記
    iga_k
    iga_k 2019/05/03
    c extention
  • バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話 - @watson1978 の日記

    Ubiregi Advent Calendar 2018 の 18 日目です。 ユビレジではたくさんのお客様の大量の POS データをお預かりしており、様々なバッチ処理も実行されています。今回は特定のケースでバッチ処理の一部が 30 分以上かかっていた処理を 14 秒で終わるようにした話について書きたいと思います。前回の Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記 に引き続き DTrace を使った話になります。 はじめに ユビレジでは CSV ファイルでお客様が特定のデータをダウンロードしたりアップロードできる機能があります。CSV ファイルにエクスポートしたり、CSV ファイルから DB に取り込む処理を Worker を起動してバッチ処理しています。 大量のデータを保有しているアカウントと同量のデータを用意して手元の環境で試したところ時間がかかるこ

    バッチ処理の一部で 30 分以上かかっていた処理を 14 秒で終わるようにした話 - @watson1978 の日記
  • Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記

    Ubiregi Advent Calendar 2018 の 5 日目です。 同僚が「Ruby 2.5 が SEGV するんだけど」というので調べて見たときの話です。結論から言うと Ruby 2.6 では直っています。 クラッシュログ 同僚の変更内容を手元の macOS で動かすと確かに SEGV して以下の様なクラッシュログが出力されていました。 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGABRT) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY VM Regions Near 0: --> __TEXT 000

    Ruby 2.5 の SEGV と闘った話 - @watson1978 の日記
    iga_k
    iga_k 2018/12/20
    神記事だこれは・・・。めっちゃ勉強になる。dtraceをスッと出してきて使えるようになりたい。
  • macOS 上で Ruby のパフォーマンスを計測する - @watson1978 の日記

    (追記 2017-10-02 01:28:42 +0900) Xcode 9 からは以下のように計測に失敗するようです。解決策が見つかるまでは Xcode 8.3 を使うか、Instruments.app で直接計測する必要がありそうです。 $ iprofiler -timeprofiler ./a.out iprofiler error: DTPerformanceSession: Authorization failure. macOS では、ターミナルから iprofiler を経由してコマンドを実行することでパフォーマンスを計測することができる。 $ iprofiler -timeprofiler ./a.out iprofiler: Preparing recording resources iprofiler: Profiling process 66908 (a) for 1

    macOS 上で Ruby のパフォーマンスを計測する - @watson1978 の日記
    iga_k
    iga_k 2017/09/18
    watsonさん紹介のプロファイラ iprofiler
  • 1