相关疑难解决方法(0)

跟踪PHP中的内存使用情况

我正在尝试跟踪处理URL的脚本的内存使用情况.基本思想是在将另一个URL添加到cURL多处理程序之前检查是否存在合理的缓冲区.我正在使用'滚动cURL'概念,在多处理程序运行时处理URL数据.这意味着每次现有URL处理并删除时,我都可以通过从池中添加新URL来保持N个连接处于活动状态.

我已经使用memory_get_usage()了一些积极的结果.添加real_usage标志有所帮助(不太清楚'系统'内存和'emalloc'内存之间的区别,但系统显示更大的数字).memory_get_usage()随着URL设置的耗尽,URL会随着URL的增加而增加.但是,我刚刚超过32M限制,我的最后一次内存检查是~18M.

每次cURL多信号请求返回时,我都会轮询内存使用情况.由于多个请求可能同时返回,因此一堆URL可能同时返回数据并实际上跳过了14M的内存使用量.但是,如果memory_get_usage()准确的话,我想这就是正在发生的事情.

[ 更新:在我猜测之前应该运行更多测试,增加php的内存限制(但在脚本中保持'安全'数量相同)并且报告的内存使用率从我自己施加的限制25M以下跳到超过32M .然后,正如预期的那样,缓慢降低为未添加的URL.但我会提出这个问题:这是正确的方法吗?]

我可以信任memory_get_usage()吗?是否有更好的替代方法来获取内存(我已经看到一些脚本解析shell命令的输出)?

php memory memory-management

32
推荐指数
2
解决办法
5万
查看次数

在PHP中处理大型JSON文件

我正在尝试处理稍大(可能高达200M)的JSON文件.该文件的结构基本上是一个对象数组.

所以有些东西:

[
  {"property":"value", "property2":"value2"},
  {"prop":"val"},
  ...
  {"foo":"bar"}
]
Run Code Online (Sandbox Code Playgroud)

每个对象都具有任意属性,并且不必与数组中的其他对象共享它们(如同,具有相同).

我想对数组中的每个对象应用处理,因为文件可能很大,我不能在内存中啜饮整个文件内容,解码JSON并迭代PHP数组.

理想情况下,我想阅读文件,获取每个对象的足够信息并进行处理.如果有类似的库可用于JSON,那么SAX类型的方法就可以了.

关于如何最好地处理这个问题的任何建议?

php json large-files

21
推荐指数
3
解决办法
2万
查看次数

如何优化php进程内存使用情况?

我正在运行一个wordpress站点,每个PHP进程使用大约200mb到250mb的驻留大小内存.凭借16GB的ram,服务器只能处理大约70个进程.通过将虚拟内存增加到16GB,它可以处理140.之后负载不断上升.如果在10分钟内有200个连接,则3Ghz四核至强处理器上的服务器负载达到20!

我已经尝试停用所有插件,但这只会将每个进程的PHP内存使用量减少不到10%.suPHP告诉我哪个用户正在使用这么多内存,但不是wordpress代码的哪个部分.

有关如何减少内存使用量的任何建议?或者是我升级到32GB内存的唯一选择?

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10585 nobody    16   0 2266m 237m 199m S 21.3  1.5   1:09.17 /usr/bin/php
10597 nobody    16   0 2257m 255m 226m S 15.3  1.6   0:17.56 /usr/bin/php
Run Code Online (Sandbox Code Playgroud)

来自pmap -d的最大输出

000000000e8b8000   27580 rw--- 000000000e8b8000 000:00000   [ anon ]
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
00002b37f2a62000   55108 r---- 0000000000000000 0fd:00000 locale-archive
mapped: 2320852K    writeable/private: 30012K    shared: 2097152K
Run Code Online (Sandbox Code Playgroud)

ipcs输出

------ Semaphore Arrays --------

key        semid      owner      perms      nsems
0x000000a7 …
Run Code Online (Sandbox Code Playgroud)

php linux wordpress centos

10
推荐指数
1
解决办法
8754
查看次数

由于内存限制,串行json_decode

我有一个大的json文件(7.3MB),我尝试json_decode,它由于内存限制而失败(致命错误:允许的内存大小为134217728字节耗尽).有没有办法串行解码json文件,一次只有一个对象/节点?

php json

5
推荐指数
1
解决办法
4642
查看次数

标签 统计

php ×4

json ×2

centos ×1

large-files ×1

linux ×1

memory ×1

memory-management ×1

wordpress ×1