nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

GCログの相対時間を絶対時間に変換する

GCログの-XX:+PrintGCTimeStampsは起動時からの経過時間を行頭に付与する。最近のVMだと絶対時間を吐いてくれる-XX:+PrintGCDateStampsが使えるけど、前者しか付与されていない相対時間のGCログを解析する機会も結構ある。

というわけで相対時間を絶対時間に変換する。0.000に該当する基準となる時間を第一引数に渡す。

$ jruby gclog-converttime.rb '2012-01-02 03:04:05.006' gc.log
require 'time'
base_datetime_s = ARGV.shift
base_datetime = Time.parse(base_datetime_s)
delta = base_datetime.to_f
while gets do
  if /^(\d+)\.(\d{3}):/ =~ $_.chomp! then
    gc_msec = "#{$1}.#{$2}".to_f
    gc_datetime = gc_msec + delta
    t = Time.at(gc_datetime)
    actual_datetime = t.strftime("%Y-%m-%d %H:%M:%S.%L")
    # actual_datetime = t.strftime("%Y-%m-%dT%H:%M:%S.%L%z") # PrintGCDateStamps format
    puts "#{actual_datetime}: #{$_}"
  else
    puts $_
  end
end