Skip to content

Commit a757c08

Browse files
committed
report: add more memory info
1 parent 2364ed7 commit a757c08

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

doc/api/report.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ is provided below for reference.
2323
```json
2424
{
2525
"header": {
26-
"reportVersion": 1,
26+
"reportVersion": 3,
2727
"event": "exception",
2828
"trigger": "Exception",
2929
"filename": "report.20181221.005011.8974.0.001.json",
@@ -198,7 +198,11 @@ is provided below for reference.
198198
}
199199
},
200200
"resourceUsage": {
201-
"rss": 45768704,
201+
"rss": 36028416,
202+
"free_memory": 54050816,
203+
"total_memory": 17179869184,
204+
"available_memory": 54050816,
205+
"constrained_memory": 360284160,
202206
"userCpuSeconds": 0.040072,
203207
"kernelCpuSeconds": 0.016029,
204208
"cpuConsumptionPercent": 5.6101,

src/node_report.cc

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#include <cwctype>
2424
#include <fstream>
2525

26-
constexpr int NODE_REPORT_VERSION = 2;
26+
constexpr int NODE_REPORT_VERSION = 3;
2727
constexpr int NANOS_PER_SEC = 1000 * 1000 * 1000;
2828
constexpr double SEC_PER_MICROS = 1e-6;
2929
constexpr int MAX_FRAME_COUNT = 10;
@@ -628,12 +628,30 @@ static void PrintResourceUsage(JSONWriter* writer) {
628628
uv_rusage_t rusage;
629629
writer->json_objectstart("resourceUsage");
630630

631+
uint64_t free_memory = uv_get_free_memory();
632+
uint64_t total_memory = uv_get_total_memory();
633+
634+
writer->json_keyvalue("free_memory", free_memory);
635+
writer->json_keyvalue("total_memory", total_memory);
636+
631637
size_t rss;
632638
int err = uv_resident_set_memory(&rss);
633639
if (!err) {
634640
writer->json_keyvalue("rss", rss);
635641
}
636642

643+
uint64_t constrained_memory = uv_get_constrained_memory();
644+
if (constrained_memory) {
645+
writer->json_keyvalue("constrained_memory", constrained_memory);
646+
}
647+
648+
// See GuessMemoryAvailableToTheProcess
649+
if (!err && constrained_memory && constrained_memory >= rss) {
650+
writer->json_keyvalue("available_memory", constrained_memory - rss);
651+
} else {
652+
writer->json_keyvalue("available_memory", free_memory);
653+
}
654+
637655
if (uv_getrusage(&rusage) == 0) {
638656
double user_cpu =
639657
rusage.ru_utime.tv_sec + SEC_PER_MICROS * rusage.ru_utime.tv_usec;

test/common/report.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ function _validateContent(report, fields = []) {
105105
'glibcVersionRuntime', 'glibcVersionCompiler', 'cwd',
106106
'reportVersion', 'networkInterfaces', 'threadId'];
107107
checkForUnknownFields(header, headerFields);
108-
assert.strictEqual(header.reportVersion, 2); // Increment as needed.
108+
assert.strictEqual(header.reportVersion, 3); // Increment as needed.
109109
assert.strictEqual(typeof header.event, 'string');
110110
assert.strictEqual(typeof header.trigger, 'string');
111111
assert(typeof header.filename === 'string' || header.filename === null);
@@ -232,11 +232,14 @@ function _validateContent(report, fields = []) {
232232
}
233233

234234
// Verify the format of the resourceUsage section.
235-
const usage = report.resourceUsage;
235+
const usage = { ...report.resourceUsage };
236+
// Delete it, otherwise checkForUnknownFields will throw error
237+
delete usage.constrained_memory;
236238
const resourceUsageFields = ['userCpuSeconds', 'kernelCpuSeconds',
237239
'cpuConsumptionPercent', 'userCpuConsumptionPercent',
238-
'kernelCpuConsumptionPercent', 'rss', 'maxRss',
239-
'pageFaults', 'fsActivity'];
240+
'kernelCpuConsumptionPercent',
241+
'maxRss', 'rss', 'free_memory', 'total_memory',
242+
'available_memory', 'pageFaults', 'fsActivity'];
240243
checkForUnknownFields(usage, resourceUsageFields);
241244
assert.strictEqual(typeof usage.userCpuSeconds, 'number');
242245
assert.strictEqual(typeof usage.kernelCpuSeconds, 'number');
@@ -245,6 +248,13 @@ function _validateContent(report, fields = []) {
245248
assert.strictEqual(typeof usage.kernelCpuConsumptionPercent, 'number');
246249
assert(Number.isSafeInteger(usage.rss));
247250
assert(Number.isSafeInteger(usage.maxRss));
251+
assert(Number.isSafeInteger(usage.free_memory));
252+
assert(Number.isSafeInteger(usage.total_memory));
253+
assert(Number.isSafeInteger(usage.available_memory));
254+
// This field may not exsit
255+
if (report.resourceUsage.constrained_memory) {
256+
assert(Number.isSafeInteger(report.resourceUsage.constrained_memory));
257+
}
248258
assert(typeof usage.pageFaults === 'object' && usage.pageFaults !== null);
249259
checkForUnknownFields(usage.pageFaults, ['IORequired', 'IONotRequired']);
250260
assert(Number.isSafeInteger(usage.pageFaults.IORequired));

0 commit comments

Comments
 (0)