mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-13 22:59:19 +10:00
Use clock_gettime for all performance timestamps
This MR adjusts the performance monitoring code to use `Process.clock_gettime` (thus `clock_gettime(3)`) instead of `Time.now`.
Using `Time.now` / `Time.new` adds more overhead than `Process.clock_gettime`, it also doesn't provide a way of getting timestamps in nanoseconds (which `Process.clock_gettime` does allow).
See merge request !4899
(cherry picked from commit 53ad9522c4)
63 lines
1.7 KiB
Ruby
63 lines
1.7 KiB
Ruby
module Gitlab
|
|
module Metrics
|
|
# Module for gathering system/process statistics such as the memory usage.
|
|
#
|
|
# This module relies on the /proc filesystem being available. If /proc is
|
|
# not available the methods of this module will be stubbed.
|
|
module System
|
|
if File.exist?('/proc')
|
|
# Returns the current process' memory usage in bytes.
|
|
def self.memory_usage
|
|
mem = 0
|
|
match = File.read('/proc/self/status').match(/VmRSS:\s+(\d+)/)
|
|
|
|
if match and match[1]
|
|
mem = match[1].to_f * 1024
|
|
end
|
|
|
|
mem
|
|
end
|
|
|
|
def self.file_descriptor_count
|
|
Dir.glob('/proc/self/fd/*').length
|
|
end
|
|
else
|
|
def self.memory_usage
|
|
0.0
|
|
end
|
|
|
|
def self.file_descriptor_count
|
|
0
|
|
end
|
|
end
|
|
|
|
# THREAD_CPUTIME is not supported on OS X
|
|
if Process.const_defined?(:CLOCK_THREAD_CPUTIME_ID)
|
|
def self.cpu_time
|
|
Process.
|
|
clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID, :millisecond).to_f
|
|
end
|
|
else
|
|
def self.cpu_time
|
|
Process.
|
|
clock_gettime(Process::CLOCK_PROCESS_CPUTIME_ID, :millisecond).to_f
|
|
end
|
|
end
|
|
|
|
# Returns the current real time in a given precision.
|
|
#
|
|
# Returns the time as a Float.
|
|
def self.real_time(precision = :millisecond)
|
|
Process.clock_gettime(Process::CLOCK_REALTIME, precision).to_f
|
|
end
|
|
|
|
# Returns the current monotonic clock time in a given precision.
|
|
#
|
|
# Returns the time as a Float.
|
|
def self.monotonic_time(precision = :millisecond)
|
|
Process.clock_gettime(Process::CLOCK_MONOTONIC, precision).to_f
|
|
end
|
|
end
|
|
end
|
|
end
|