我在ubuntu和WordPress上都安装了php5,安装后可以运行,但是用了几天发现进程很多,占用内存也很大,我尝试使用
ps -aux | grep www-data
并发现大约30个这样的进程。
www-data 5066 0.0 0.0 131664 780 ? S 16:20 0:00 /usr/sbin/php5-fpm --fpm-config /etc/php5/fpm/main.conf
我尝试过了
kill -9 pid
但它不起作用,又出现了更多进程。所以你能告诉我如何安全地杀死它们吗?我不想我的 vps 的内存被它占用。
答案1
但它不起作用,再次出现更多流程
真的吗?虽然我预计会出现更多进程,但您终止的进程应该会消失。
如果您想停止所有这些,然后关闭守护进程,我不知道它在您的机器上是如何配置的,但在这里我会这样做......
/etc/init.d/php-fpm stop
但这不是解决“我发现有很多进程,占用了很多内存”问题的方法。你应该从进行适当的流量分析和分析代码开始。
答案2
试试这里,我认为这是一个同样的问题:)
“在 Debian Lenny 中,Apache 默认以 www-data 的身份运行。您可能会将单个“父”apache 进程(以 root 身份运行)与执行 HTTP 请求处理的 apache“子”进程(以 www-data 身份运行)相混淆。“父”和“子”进程看起来都应该像是使用 /usr/sbin/apache2 -k start 启动的(当您 ps aux | grep apache 时),唯一的区别是进程所有者。
要控制 init 启动脚本,您可以使用 sudo sysv-rc-conf (如果没有,请使用 sudo aptitude install sysv-rc-conf - 它只是一个简单的类似于 curses 的 Perl 包装器,用于 init 脚本)。" -Chronos
因此每个进程都是处理 http 请求的子进程,如果您真的想杀死它们,可以使用 sudo kill PID 或 /usr/sbin/apache2 -k stop 杀死该进程。
汤姆
答案3
您所看到的情况绝对没有问题。PHP 是 Apache 运行的一个模块,由用户控制www-data
。您所看到的是正常行为。而我为提高性能所做的大部分调整都与 Apache 配置有关,而不是 PHP 设置。
如果想要更好地控制这种行为,有两个地方可以进行调整。
1.调整PHP内存限制:打开您的 php.ini 文件(位于 中)/etc/php5/apache2/php.ini
并编辑名为 的选项memory_limit
。它应该设置为 64M 或 32M。但这基本上是任何 PHP 进程(与每个 Apache2 进程相关(见下文))可以使用的最大内存限制。因此,如果您运行 WordPress 并且它想要运行任何具有 32M RAM 的进程,则没有问题。如果它需要更多内存,则脚本将失败,并且位于 的 Apache2 错误日志
/var/log/apache2/error.log
将充满错误。
2.调整Apache配置以满足您的需求:由于 PHP 是在 Apache 中运行的一个模块,因此运行的 Apache 进程越多,占用的内存就越多。如果您安装了标准的 Apache2,请打开此文件并查看:/etc/apache2/apache2.conf
。具体来说,以下是我在标准安装中始终调整的设置。
- 暂停:这是客户端向服务器发出请求与服务器完成该请求之间的超时时间。根据我的经验,300 秒(5 分钟)的设置太高了。我将其调整为 120。
- 活着:我总是保持这个状态,因为它可以帮助 Apache 更好地利用内存和资源。这基本上意味着如果客户端仍在请求内容,Apache 子进程将不会自行终止。这样,一个进程就可以传输数据,然后在完成工作后安全地终止。
- 最大KeepAliveRequests:这直接与有关
KeepAlive
。我根据服务器需求进行调整。对于开发环境,我将其保持在较低水平。假设为 3 或 4。对于生产环境,我倾向于认为KeepAlive
这仅适用于大约 1/3 的连接。因此,我将其设置为大约 24 或 32。但如果内存是一个问题,我会将其保持在较低水平,因为KeepAlive
运行的进程越多,运行的客户端就越多,并且每个进程使用的 RAM 就越多。 保持活动超时:这基本上是衡量网站加载页面速度的指标。想想看:为什么要在客户端获取一页内容所需的时间之后保持连接处于活动状态?根据我的经验,2 秒到 5 秒的设置是不错的。但是,当渲染页面的时间增加到 5 秒时,就意味着某些东西确实阻碍了底层系统。所以对我来说,这是一个重新评估代码并清理资源密集型编码的信号。
接下来进入该
mpm_prefork_module
区域。这是我设置开发环境的方式;这适用于流量较低的网站。
<IfModule mpm_prefork_module> StartServers 8 MinSpareServers 8 MaxSpareServers 8 ServerLimit 16 MaxClients 16 MaxRequestsPerChild 2000 </IfModule>
基本上,这设置了基本 Apache 安装的所有限制和参数。我相信每个参数都应该是不言自明的,但这是我的细分。
- 启动服务器:Apache 下有多少个子服务器立即启动。
- 最小备用服务器:需要保留的最小子服务器数量。
- 最大备用服务器数:保留的最大子服务器数量。
- 服务器限制:可存在的子服务器数量的最大限制。
- 最大客戶數:任何特定时刻可以存在的最大客户端数量。
- 每个子项的最大请求数:此设置有助于在一定数量的请求后终止子进程。这有助于防止内存泄漏,因为从技术上讲,子进程可以一直运行到下一次 Apache2 重新启动。我喜欢实施一项保护措施,这样即使开发人员部署了草率的代码,我晚上也可以安然入睡。
希望这可以帮助!