| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 2a3cca7 commit 0abb724
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -81,9 +81,7 @@ static void PrintJavaScriptStack(JSONWriter* writer, | |||
| 81 | 81 | Local<String> stackstr, | |
| 82 | 82 | const char* trigger); | |
| 83 | 83 | static void PrintNativeStack(JSONWriter* writer); | |
| 84 | - #ifndef _WIN32 | ||
| 85 | 84 | static void PrintResourceUsage(JSONWriter* writer); | |
| 86 | - #endif | ||
| 87 | 85 | static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate); | |
| 88 | 86 | static void PrintSystemInformation(JSONWriter* writer); | |
| 89 | 87 | static void PrintLoadedLibraries(JSONWriter* writer); | |
@@ -289,9 +287,7 @@ static void WriteNodeReport(Isolate* isolate, | |||
| 289 | 287 | PrintGCStatistics(&writer, isolate); | |
| 290 | 288 | ||
| 291 | 289 | // Report OS and current thread resource usage | |
| 292 | - #ifndef _WIN32 | ||
| 293 | 290 | PrintResourceUsage(&writer); | |
| 294 | - #endif | ||
| 295 | 291 | ||
| 296 | 292 | writer.json_arraystart("libuv"); | |
| 297 | 293 | if (env != nullptr) { | |
@@ -466,39 +462,38 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) { | |||
| 466 | 462 | writer->json_objectend(); | |
| 467 | 463 | } | |
| 468 | 464 | ||
| 469 | - #ifndef _WIN32 | ||
| 470 | - // Report resource usage (Linux/OSX only). | ||
| 471 | 465 | static void PrintResourceUsage(JSONWriter* writer) { | |
| 472 | 466 | // Get process uptime in seconds | |
| 473 | 467 | uint64_t uptime = | |
| 474 | 468 | (uv_hrtime() - node::per_process::node_start_time) / (NANOS_PER_SEC); | |
| 475 | 469 | if (uptime == 0) uptime = 1; // avoid division by zero. | |
| 476 | 470 | ||
| 477 | 471 | // Process and current thread usage statistics | |
| 478 | - struct rusage stats; | ||
| 472 | + uv_rusage_t rusage; | ||
| 479 | 473 | writer->json_objectstart("resourceUsage"); | |
| 480 | - if (getrusage(RUSAGE_SELF, &stats) == 0) { | ||
| 474 | + if (uv_getrusage(&rusage) == 0) { | ||
| 481 | 475 | double user_cpu = | |
| 482 | - stats.ru_utime.tv_sec + SEC_PER_MICROS * stats.ru_utime.tv_usec; | ||
| 476 | + rusage.ru_utime.tv_sec + SEC_PER_MICROS * rusage.ru_utime.tv_usec; | ||
| 483 | 477 | double kernel_cpu = | |
| 484 | - stats.ru_stime.tv_sec + SEC_PER_MICROS * stats.ru_stime.tv_usec; | ||
| 478 | + rusage.ru_stime.tv_sec + SEC_PER_MICROS * rusage.ru_stime.tv_usec; | ||
| 485 | 479 | writer->json_keyvalue("userCpuSeconds", user_cpu); | |
| 486 | 480 | writer->json_keyvalue("kernelCpuSeconds", kernel_cpu); | |
| 487 | 481 | double cpu_abs = user_cpu + kernel_cpu; | |
| 488 | 482 | double cpu_percentage = (cpu_abs / uptime) * 100.0; | |
| 489 | 483 | writer->json_keyvalue("cpuConsumptionPercent", cpu_percentage); | |
| 490 | - writer->json_keyvalue("maxRss", stats.ru_maxrss * 1024); | ||
| 484 | + writer->json_keyvalue("maxRss", rusage.ru_maxrss * 1024); | ||
| 491 | 485 | writer->json_objectstart("pageFaults"); | |
| 492 | - writer->json_keyvalue("IORequired", stats.ru_majflt); | ||
| 493 | - writer->json_keyvalue("IONotRequired", stats.ru_minflt); | ||
| 486 | + writer->json_keyvalue("IORequired", rusage.ru_majflt); | ||
| 487 | + writer->json_keyvalue("IONotRequired", rusage.ru_minflt); | ||
| 494 | 488 | writer->json_objectend(); | |
| 495 | 489 | writer->json_objectstart("fsActivity"); | |
| 496 | - writer->json_keyvalue("reads", stats.ru_inblock); | ||
| 497 | - writer->json_keyvalue("writes", stats.ru_oublock); | ||
| 490 | + writer->json_keyvalue("reads", rusage.ru_inblock); | ||
| 491 | + writer->json_keyvalue("writes", rusage.ru_oublock); | ||
| 498 | 492 | writer->json_objectend(); | |
| 499 | 493 | } | |
| 500 | 494 | writer->json_objectend(); | |
| 501 | 495 | #ifdef RUSAGE_THREAD | |
| 496 | + struct rusage stats; | ||
| 502 | 497 | if (getrusage(RUSAGE_THREAD, &stats) == 0) { | |
| 503 | 498 | writer->json_objectstart("uvthreadResourceUsage"); | |
| 504 | 499 | double user_cpu = | |
@@ -518,7 +513,6 @@ static void PrintResourceUsage(JSONWriter* writer) { | |||
| 518 | 513 | } | |
| 519 | 514 | #endif | |
| 520 | 515 | } | |
| 521 | - #endif | ||
| 522 | 516 | ||
| 523 | 517 | // Report operating system information. | |
| 524 | 518 | static void PrintSystemInformation(JSONWriter* writer) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -43,9 +43,9 @@ function _validateContent(data) { | |||
| 43 | 43 | // Verify that all sections are present as own properties of the report. | |
| 44 | 44 | const sections = ['header', 'javascriptStack', 'nativeStack', | |
| 45 | 45 | 'javascriptHeap', 'libuv', 'environmentVariables', | |
| 46 | - 'sharedObjects']; | ||
| 46 | + 'sharedObjects', 'resourceUsage']; | ||
| 47 | 47 | if (!isWindows) | |
| 48 | - sections.push('resourceUsage', 'userLimits'); | ||
| 48 | + sections.push('userLimits'); | ||
| 49 | 49 | ||
| 50 | 50 | if (report.uvthreadResourceUsage) | |
| 51 | 51 | sections.push('uvthreadResourceUsage'); | |
@@ -133,26 +133,24 @@ function _validateContent(data) { | |||
| 133 | 133 | }); | |
| 134 | 134 | }); | |
| 135 | 135 | ||
| 136 | - // Verify the format of the resourceUsage section on non-Windows platforms. | ||
| 137 | - if (!isWindows) { | ||
| 138 | - const usage = report.resourceUsage; | ||
| 139 | - const resourceUsageFields = ['userCpuSeconds', 'kernelCpuSeconds', | ||
| 140 | - 'cpuConsumptionPercent', 'maxRss', | ||
| 141 | - 'pageFaults', 'fsActivity']; | ||
| 142 | - checkForUnknownFields(usage, resourceUsageFields); | ||
| 143 | - assert.strictEqual(typeof usage.userCpuSeconds, 'number'); | ||
| 144 | - assert.strictEqual(typeof usage.kernelCpuSeconds, 'number'); | ||
| 145 | - assert.strictEqual(typeof usage.cpuConsumptionPercent, 'number'); | ||
| 146 | - assert(Number.isSafeInteger(usage.maxRss)); | ||
| 147 | - assert(typeof usage.pageFaults === 'object' && usage.pageFaults !== null); | ||
| 148 | - checkForUnknownFields(usage.pageFaults, ['IORequired', 'IONotRequired']); | ||
| 149 | - assert(Number.isSafeInteger(usage.pageFaults.IORequired)); | ||
| 150 | - assert(Number.isSafeInteger(usage.pageFaults.IONotRequired)); | ||
| 151 | - assert(typeof usage.fsActivity === 'object' && usage.fsActivity !== null); | ||
| 152 | - checkForUnknownFields(usage.fsActivity, ['reads', 'writes']); | ||
| 153 | - assert(Number.isSafeInteger(usage.fsActivity.reads)); | ||
| 154 | - assert(Number.isSafeInteger(usage.fsActivity.writes)); | ||
| 155 | - } | ||
| 136 | + // Verify the format of the resourceUsage section. | ||
| 137 | + const usage = report.resourceUsage; | ||
| 138 | + const resourceUsageFields = ['userCpuSeconds', 'kernelCpuSeconds', | ||
| 139 | + 'cpuConsumptionPercent', 'maxRss', | ||
| 140 | + 'pageFaults', 'fsActivity']; | ||
| 141 | + checkForUnknownFields(usage, resourceUsageFields); | ||
| 142 | + assert.strictEqual(typeof usage.userCpuSeconds, 'number'); | ||
| 143 | + assert.strictEqual(typeof usage.kernelCpuSeconds, 'number'); | ||
| 144 | + assert.strictEqual(typeof usage.cpuConsumptionPercent, 'number'); | ||
| 145 | + assert(Number.isSafeInteger(usage.maxRss)); | ||
| 146 | + assert(typeof usage.pageFaults === 'object' && usage.pageFaults !== null); | ||
| 147 | + checkForUnknownFields(usage.pageFaults, ['IORequired', 'IONotRequired']); | ||
| 148 | + assert(Number.isSafeInteger(usage.pageFaults.IORequired)); | ||
| 149 | + assert(Number.isSafeInteger(usage.pageFaults.IONotRequired)); | ||
| 150 | + assert(typeof usage.fsActivity === 'object' && usage.fsActivity !== null); | ||
| 151 | + checkForUnknownFields(usage.fsActivity, ['reads', 'writes']); | ||
| 152 | + assert(Number.isSafeInteger(usage.fsActivity.reads)); | ||
| 153 | + assert(Number.isSafeInteger(usage.fsActivity.writes)); | ||
| 156 | 154 | ||
| 157 | 155 | // Verify the format of the uvthreadResourceUsage section, if present. | |
| 158 | 156 | if (report.uvthreadResourceUsage) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments