php - php进程的内存使用情况

标签 php linux memory

摘要


简短的建议(来自更多数据信息,请参阅答案)

为避免内存泄漏,您可以:

  1. 当变量变得无用时立即取消设置
  2. 您可以使用xdebug详细报告函数的内存消耗并查找内存泄漏
  3. 您可以设置 memory_limit(例如设置为 5Mb)以避免虚拟内存分配

问题

除了库和变量之外,什么 php 可以使用内存? 我使用以下代码监视变量及其 ~ 3Mb 使用的内存:

$vars = array_keys(get_defined_vars());
        $cnt_vars = count($vars);
        $allsize = 0;
        for ($j = 0; $j < $cnt_vars; $j++) {

            try
            {
                $size = @serialize($$vars[$j]);
                $size = strlen($size);
            }
            catch(Exception $e){
                $str = json_encode($$vars[$j]);
                $str = str_replace(array('{"','"}','":"','":'), '', $str);
                $size = strlen($str);
            }
            $vars[$j] = array(
                'size' => $size,
                'name' => $vars[$j]
            );
            $allsize += $size;
        }

和库需要〜18Mb(libcurl等) 所以总共有 21 Mb,但是

pmap -x (process) shows, that total memory consumption is kB: 314028 RSS: 74704 Dirty: 59672

因此,实际总消耗量约为 74Mb。 我还在我的 pmap 中看到一些带有 [anon] 映射的大块 什么 PHP 使用这个 block ?

php版本:5.5.9-1ubuntu4.14 php 扩展:

root@webdep:~# php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mcrypt
mhash
openssl
pcntl
pcre
PDO
pdo_pgsql
pgsql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

最佳答案

PHP 与编译为单个二进制文件的 C 或 CPP 代码不同。您的所有脚本都在 Zend 虚拟机中执行。而且大部分内存都被VM本身消耗掉了。这包括加载的扩展使用的内存、PHP 进程使用的共享库(.so 文件)和任何其他共享资源。

我不记得确切的来源,但我在某处读到,将近 70% 的总 CPU 周期被 PHP 内部消耗,只有 30% 进入您的代码(如果我在这里错了,请纠正我)。这与内存消耗没有直接关系,但应该让您了解 PHP 的工作原理。

关于匿名 block ,我在另一个 SO 答案中找到了一些细节。答案是关于 Java,但同样适用于 PHP。

Anon blocks are "large" blocks allocated via malloc or mmap -- see the manpages. As such, they have nothing to do with the Java heap (other than the fact that the entire heap should be stored in just such a block).

我建议禁用一些扩展。这应该会为您节省一些未使用的内存。

关于php - php进程的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35476889/

相关文章:

c++ - 想知道 c++ 中的内存部分是如何工作的

javascript - 可能的node.js内存过度使用w/express服务器和pm2

PHP/MySQL 不会更新小数字段

php白屏死机

phpbrew 安装特定 php 版本构建失败(make : *** [sapi/cli/php] ERROR 1)

c - 从包装器中锁定程序

php - Apple 推送通知服务 : Certificate Install Server Side?

php - Symfony Form如何自动设置 child 的 parent

c - 在 linux C 中寻找位图实现 API

java - 如何可靠地给 Java 更多内存?