Module: GC::Profiler
- Defined in:
- gc.c
Class Method Summary collapse
-
.GC::Profiler.clear ⇒ nil
Clears the GC profiler data.
-
.GC::Profiler.disable(->nil) ⇒ Object
Stops the GC profiler.
-
.GC::Profiler.enable(->nil) ⇒ Object
Starts the GC profiler.
-
.GC::Profiler.enabled?(->true) ⇒ Boolean
The current status of GC profile mode.
-
.GC::Profiler.raw_data(->[Hash, ...]) ⇒ Object
Returns an Array of individual raw profile data Hashes ordered from earliest to latest by
:GC_INVOKE_TIME
. -
.report(*args) ⇒ Object
Writes the GC::Profiler.result to
$stdout
or the given IO object. -
.GC::Profiler.result ⇒ String
Returns a profile data report such as:.
-
.GC::Profiler.total_time(->float) ⇒ Object
The total time used for garbage collection in seconds.
Class Method Details
.GC::Profiler.clear ⇒ nil
Clears the GC profiler data.
10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 |
# File 'gc.c', line 10974
static VALUE
gc_profile_clear(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
void *p = objspace->profile.records;
objspace->profile.records = NULL;
objspace->profile.size = 0;
objspace->profile.next_index = 0;
objspace->profile.current_record = 0;
if (p) {
free(p);
}
return Qnil;
}
|
.GC::Profiler.disable(->nil) ⇒ Object
Stops the GC profiler.
11317 11318 11319 11320 11321 11322 11323 11324 11325 |
# File 'gc.c', line 11317
static VALUE
gc_profile_disable(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
objspace->profile.run = FALSE;
objspace->profile.current_record = 0;
return Qnil;
}
|
.GC::Profiler.enable(->nil) ⇒ Object
Starts the GC profiler.
11300 11301 11302 11303 11304 11305 11306 11307 |
# File 'gc.c', line 11300
static VALUE
gc_profile_enable(VALUE _)
{
rb_objspace_t *objspace = &rb_objspace;
objspace->profile.run = TRUE;
objspace->profile.current_record = 0;
return Qnil;
}
|
.GC::Profiler.enabled?(->true) ⇒ Boolean
The current status of GC profile mode.
11285 11286 11287 11288 11289 11290 |
# File 'gc.c', line 11285
static VALUE
gc_profile_enable_get(VALUE self)
{
rb_objspace_t *objspace = &rb_objspace;
return objspace->profile.run ? Qtrue : Qfalse;
}
|
.GC::Profiler.raw_data(->[Hash, ...]) ⇒ Object
Returns an Array of individual raw profile data Hashes ordered from earliest to latest by :GC_INVOKE_TIME
.
For example:
[
:GC_TIME=>1.3000000000000858e-05,
:GC_INVOKE_TIME=>0.010634999999999999,
:HEAP_USE_SIZE=>289640,
:HEAP_TOTAL_SIZE=>588960,
:HEAP_TOTAL_OBJECTS=>14724,
:GC_IS_MARKED=>false
,
# ...
]
The keys mean:
:GC_TIME
-
Time elapsed in seconds for this GC run
:GC_INVOKE_TIME
-
Time elapsed in seconds from startup to when the GC was invoked
:HEAP_USE_SIZE
-
Total bytes of heap used
:HEAP_TOTAL_SIZE
-
Total size of heap in bytes
:HEAP_TOTAL_OBJECTS
-
Total number of objects
:GC_IS_MARKED
-
Returns
true
if the GC is in mark phaseIf ruby was built with
GC_PROFILE_MORE_DETAIL
, you will also have access to the following hash keys::GC_MARK_TIME
:GC_SWEEP_TIME
:ALLOCATE_INCREASE
:ALLOCATE_LIMIT
:HEAP_USE_PAGES
:HEAP_LIVE_OBJECTS
:HEAP_FREE_OBJECTS
:HAVE_FINALIZE
11039 11040 11041 11042 11043 11044 11045 11046 11047 11048 11049 11050 11051 11052 11053 11054 11055 11056 11057 11058 11059 11060 11061 11062 11063 11064 11065 11066 11067 11068 11069 11070 11071 11072 11073 11074 11075 11076 11077 11078 11079 11080 11081 11082 11083 11084 11085 11086 |
# File 'gc.c', line 11039
static VALUE
gc_profile_record_get(VALUE _)
{
VALUE prof;
VALUE gc_profile = rb_ary_new();
size_t i;
rb_objspace_t *objspace = (&rb_objspace);
if (!objspace->profile.run) {
return Qnil;
}
for (i =0; i < objspace->profile.next_index; i++) {
gc_profile_record *record = &objspace->profile.records[i];
prof = rb_hash_new();
rb_hash_aset(prof, ID2SYM(rb_intern("GC_FLAGS")), gc_info_decode(0, rb_hash_new(), record->flags));
rb_hash_aset(prof, ID2SYM(rb_intern("GC_TIME")), DBL2NUM(record->gc_time));
rb_hash_aset(prof, ID2SYM(rb_intern("GC_INVOKE_TIME")), DBL2NUM(record->gc_invoke_time));
rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_USE_SIZE")), SIZET2NUM(record->heap_use_size));
rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_TOTAL_SIZE")), SIZET2NUM(record->heap_total_size));
rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_TOTAL_OBJECTS")), SIZET2NUM(record->heap_total_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("GC_IS_MARKED")), Qtrue);
#if GC_PROFILE_MORE_DETAIL
rb_hash_aset(prof, ID2SYM(rb_intern("GC_MARK_TIME")), DBL2NUM(record->gc_mark_time));
rb_hash_aset(prof, ID2SYM(rb_intern("GC_SWEEP_TIME")), DBL2NUM(record->gc_sweep_time));
rb_hash_aset(prof, ID2SYM(rb_intern("ALLOCATE_INCREASE")), SIZET2NUM(record->allocate_increase));
rb_hash_aset(prof, ID2SYM(rb_intern("ALLOCATE_LIMIT")), SIZET2NUM(record->allocate_limit));
rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_USE_PAGES")), SIZET2NUM(record->heap_use_pages));
rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_LIVE_OBJECTS")), SIZET2NUM(record->heap_live_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("HEAP_FREE_OBJECTS")), SIZET2NUM(record->heap_free_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("REMOVING_OBJECTS")), SIZET2NUM(record->removing_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("EMPTY_OBJECTS")), SIZET2NUM(record->empty_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("HAVE_FINALIZE")), (record->flags & GPR_FLAG_HAVE_FINALIZE) ? Qtrue : Qfalse);
#endif
#if RGENGC_PROFILE > 0
rb_hash_aset(prof, ID2SYM(rb_intern("OLD_OBJECTS")), SIZET2NUM(record->old_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("REMEMBERED_NORMAL_OBJECTS")), SIZET2NUM(record->remembered_normal_objects));
rb_hash_aset(prof, ID2SYM(rb_intern("REMEMBERED_SHADY_OBJECTS")), SIZET2NUM(record->remembered_shady_objects));
#endif
rb_ary_push(gc_profile, prof);
}
return gc_profile;
}
|
.GC::Profiler.report ⇒ Object .GC::Profiler.report(io) ⇒ Object
Writes the GC::Profiler.result to $stdout
or the given IO object.
11243 11244 11245 11246 11247 11248 11249 11250 11251 11252 |
# File 'gc.c', line 11243
static VALUE
gc_profile_report(int argc, VALUE *argv, VALUE self)
{
VALUE out;
out = (!rb_check_arity(argc, 0, 1) ? rb_stdout : argv[0]);
gc_profile_dump_on(out, rb_io_write);
return Qnil;
}
|
.GC::Profiler.result ⇒ String
Returns a profile data report such as:
GC 1 invokes.
Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC time(ms)
1 0.012 159240 212940 10647 0.00000000000001530000
11226 11227 11228 11229 11230 11231 11232 |
# File 'gc.c', line 11226
static VALUE
gc_profile_result(VALUE _)
{
VALUE str = rb_str_buf_new(0);
gc_profile_dump_on(str, rb_str_buf_append);
return str;
}
|
.GC::Profiler.total_time(->float) ⇒ Object
The total time used for garbage collection in seconds
11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 |
# File 'gc.c', line 11261
static VALUE
gc_profile_total_time(VALUE self)
{
double time = 0;
rb_objspace_t *objspace = &rb_objspace;
if (objspace->profile.run && objspace->profile.next_index > 0) {
size_t i;
size_t count = objspace->profile.next_index;
for (i = 0; i < count; i++) {
time += objspace->profile.records[i].gc_time;
}
}
return DBL2NUM(time);
}
|