BitOne / php-meminfo

PHP extension to get insight about memory usage
MIT License
1.07k stars 78 forks source link

Diff two JSON files #84

Open WyriHaximus opened 5 years ago

WyriHaximus commented 5 years ago

Attempting to hunt down a memory leak using the following code:

meminfo_dump(fopen('before.json', 'w'));
echo gc_collect_cycles();
meminfo_dump(fopen('after.json', 'w'));

Now I can't easily compare those two files. A diff command would be a great addition to see what has changed.

BitOne commented 5 years ago

If you have a difference between the 2 files, then there's a bug in phpMeminfo or a bug in the Zen engine.

When you cal gc_collect_cycles(), it triggers the circular collection sooner. But in all cases, the circular collection would have collected the cycles without references.

And as phpMeminfo is built to provide information on memory leak, that is items that have still reference so they cannot be cleaned up from memory, it doesn't make much sense to list items that will be collected and cleanup automatically by the Zend engine.

So there should not be any difference between the two files.

BitOne commented 5 years ago

Maybe if you tell me what you want to know exactly, we could find a real solution for you case ?

WyriHaximus commented 5 years ago

When you cal gc_collect_cycles(), it triggers the circular collection sooner. But in all cases, the circular collection would have collected the cycles without references.

Yeah so I've learned since opening this issue.

And as phpMeminfo is built to provide information on memory leak, that is items that have still reference so they cannot be cleaned up from memory, it doesn't make much sense to list items that will be collected and cleanup automatically by the Zend engine.

So there should not be any difference between the two files.

To find a memory leak I want to see the differences between two or more files. See the exact differences and what items are new or removed between files.

BitOne commented 5 years ago

Hey @WyriHaximus ,

Thanks for your answer!

When I need to do that, I usually used the summary analyzer and the diff command to see which kind of objects leaked the most. But it's maybe not precise enough for your use case.

As we are using JSON files, maybe you can try some generic JSON tools, like jd: https://github.com/josephburnett/jd#command-line-usage

It's capable of diffing two different json files.

Don't hesitate to share your experience with it, it may help others, and we could add a section in the documentation about it, if it's worth it.

WyriHaximus commented 5 years ago

That is a good one. Haven't thought of that :+1: , will give it a try and report back