BitOne / php-meminfo

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

Wrong result with Fibers PHP 8.1 #133

Open vtsykun opened 6 months ago

vtsykun commented 6 months ago

STR

1) Run the script.

namespace AAA;

$mem = new \ArrayObject([1, 2, 3]);
$_SERVER = [];
unset($argc, $argv);

$fiber = new \Fiber(static function() use ($mem): void {
    echo "Run from the Fiber...\n";

    while (true) {
        $i = 100;
        while ($i--) {
            $mem->offsetSet('a'.random_int(0, 2000000), 10);
        }
        echo "Count ". $mem->count() ."\n";
        \Fiber::suspend();
    }
});

$mem = null;
unset($mem);

gc_collect_cycles();

$fiber->start();

$fiber->resume();
\meminfo_dump(\fopen('/tmp/mem_dump.json', 'w'));
$fiber->resume();

Actual result: ArrayObject is missing in the memory dump. Expected result: ArrayObject must be persist in the memory dump

mem_dump.json
``` { "header" : { "memory_usage" : 397944, "memory_usage_real" : 2097152, "peak_memory_usage" : 431256, "peak_memory_usage_real" : 2097152 }, "items": { "0x7f5691e58200" : { "type" : "array", "size" : "72", "symbol_name" : "_GET", "is_root" : true, "frame" : "" , "children" : { } }, "0x7f5691e58220" : { "type" : "array", "size" : "72", "symbol_name" : "_POST", "is_root" : true, "frame" : "" , "children" : { } }, "0x7f5691e58240" : { "type" : "array", "size" : "72", "symbol_name" : "_COOKIE", "is_root" : true, "frame" : "" , "children" : { } }, "0x7f5691e58260" : { "type" : "array", "size" : "72", "symbol_name" : "_FILES", "is_root" : true, "frame" : "" , "children" : { } }, "0x7f5691e14090" : { "type" : "null", "size" : "16", "symbol_name" : "argv", "is_root" : true, "frame" : "" }, "0x7f5691e14080" : { "type" : "null", "size" : "16", "symbol_name" : "argc", "is_root" : true, "frame" : "" }, "0x7f5691e582c0" : { "type" : "array", "size" : "72", "symbol_name" : "_SERVER", "is_root" : true, "frame" : "" , "children" : { } }, "0x7f5691e14070" : { "type" : "null", "size" : "16", "symbol_name" : "mem", "is_root" : true, "frame" : "" }, "0x7f5691e5d640" : { "type" : "object", "size" : "72", "symbol_name" : "fiber", "is_root" : true, "frame" : "" , "class" : "Fiber", "object_handle" : "2", "children" : { } } } } ```