Download the PHP package danxill/php-meminfo-analyzer without Composer
On this page you can find all versions of the php package danxill/php-meminfo-analyzer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download danxill/php-meminfo-analyzer
More information about danxill/php-meminfo-analyzer
Files in danxill/php-meminfo-analyzer
Package php-meminfo-analyzer
Short Description Tools to analyze meminfo dump files, it's a part of bitone/mem-info project
License MIT
Informations about the package php-meminfo-analyzer
MemInfoAnalyzer
the repository uses some of the code from https://github.com/BitOne/php-meminfo to simplify integration
Usage
Dumping memory content
This function generates a dump of the PHP memory in a JSON format. This dump can be later analyzed by the provided analyzers.
This function takes a stream handle as a parameter. It allows you to specify a file (ex fopen('/tmp/file.txt', 'w')
, as well as to use standard output with the php://stdout
stream.
Displaying a summary of items in memory
Example
Displaying a list of objects with the largest number of children
Example
Querying the memory dump to find specific objects
Example
Displaying the reference path
The reference path is the path between a specific item in memory (identified by its pointer address) and all the intermediary items up to the one item that is attached to a variable still alive in the program.
This path shows which items are responsible for the memory leak of the specific item provided.
Example
A workflow to find and understand memory leaks using PHP Meminfo
Hunting down memory leaks
Other memory debugging tools for PHP
-
XDebug (https://xdebug.org/) With the trace feature and the memory delta option (tool see XDebug documentation), you can trace function memory usage. You can use the provided script to get an aggregated view (TODO link)
- PHP Memprof (https://github.com/arnaud-lb/php-memory-profiler) Provides aggregated data about memory usage by functions. Far less resource intensive than a full trace from XDebug.
Troubleshooting
"A lot of memory usage is reported by the memory_usage
entry, but the cumulative size of the items in the summary is far lower than the memory usage"
A lot of memory is used internally by the Zend Engine itself to compile PHP files, to run the virtual machine, to execute the garbage collector, etc... Another part of the memory is usually taken by PHP extensions themselves. And the remaining memory usage comes from the PHP data structures from your program.
In some cases, several hundred megabytes can be used internally by some PHP extensions. Examples are the PDO extension and MySQLi extension. By default, when executing a SQL query they will buffer all the results inside the PHP memory: http://php.net/manual/en/mysqlinfo.concepts.buffering.php
In case of very large number of results, this will consume a lot of memory, and this memory usage is not caused by the data you have in your objects or array manipulated by your program, but by the way the extension works.
This is only one example, but the same can happen with image manipulation extensions, that will use a lot of memory to transform images.
All the extensions are using the Zend Memory Manager, so that they will not exceed the maximum memory limit set for the PHP process. So their memory usage is included in the information provided by memory_get_usage()
.
But PHP Meminfo is only able to get information on memory used by the data structure from the PHP program, not from the extensions themselves.
Hence the difference between those numbers, which can be quite big.
"Call to undefined function" when calling meminfo_dump
This means the extension is not enabled.
Check the PHP Info output and look for the MemInfo data.
To see the PHP Info output, just create a page calling the phpinfo();
function, and load it from your browser, or call php -i
from the command line.
Why most tests are "skipped"?
While doing a make test
, some tests will need JSON capabilities. But the
compilation system generates a clean env by removing all configuration
directives that load extensions.
So if JSON capabilites are packaged as a separate extension (instead of
being compiled directly in the PHP runtime), the tests will be skipped.
You may run them with the run-tests.php
generated after the make test
command, by providing the php
executable:
In this case your tests will run with your local PHP configuration, including the loading of the JSON extension.
Please note this is not required when working with PHP 8 as the JSON functions are now usually complied in PHP directly.
Credits
Thanks to Derick Rethans for his inspirational work on the essential XDebug. See http://www.xdebug.org/
All versions of php-meminfo-analyzer with dependencies
symfony/filesystem Version ^3.4 || ^4.4 || ^5.0
symfony/serializer Version ^3.4 || ^4.4 || ^5.0
clue/graph Version ^0.9.0
graphp/algorithms Version ^0.8.1