gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:31:46 27 4
gpt4 key购买 nike

摘要


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

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

  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.14php 扩展:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com