*

ruby pg prepareでのメモリーリーク対策

作成:2018-08-29 更新:2018-08-29

ruby pg 使用時のprepareでのメモリーリーク

かなり以前から使ってるrubyで記述したプログラムが out of memory で停止するように2018年8月下旬からなった。

環境

実行中の様子をtopで見ていると、みるみるmemory free 次にswap freeが減っていき遂に両方0になってしまいました。

対策

exec_preparedの結果rsを使用終了後、下の例のようにrs.clearする。

#!/usr/bin/ruby

require 'pg'

rowID = 9

begin
  
    con = PG.connect :dbname => 'testdb', :user => 'henohenomoheji'
    
    con.prepare 'stm1', "SELECT * FROM player WHERE Id=$1"
    rs = con.exec_prepared 'stm1', [rowId]
        
    puts rs.values 
    
rescue PG::Error => e

    puts e.message 
    
ensure

rs.clear if rs
con.close if con

実際プログラムでは、loop内でexec_prepareしていました。

カテゴリー

Tags

▲TOPへ戻る