标签: drupal

如何使用 Apache 和 PHP 调查内存泄漏?

我们正在运行一个执行财务建模的大型 Drupal 网站。考虑到 apache 使用的内存超时增加而 apache 进程数保持稳定,我们似乎遇到了某种内存泄漏:

在此处输入图片说明

在此处输入图片说明

我们知道内存问题来自 apache/PHP,因为每当我们发出/etc/init.d/httpd reload内存使用量下降(见上面的截图和下面的 CLI 输出):

在 httpd 重新加载之前

美元免费
             缓存的已用空闲共享缓冲区总数
内存:49447692 45926468 3521224 0 191100 22609728
-/+ 缓冲区/缓存:23125640 26322052
掉期:2097144 536552 1560592

httpd重新加载后

美元免费
             缓存的已用空闲共享缓冲区总数
电话:49447692 28905752 20541940 0 191360 22598428
-/+ 缓冲区/缓存:6115964 43331728
掉期:2097144 536552 1560592

每个 apache 线程都分配了一个memory_limit512MB的 PHP ,这解释了高内存使用量与低请求量的区别,以及max_execution_time120 秒的时间,它应该终止执行时间更长的线程,因此应该防止内存使用量的不断增长。看到。

问:我们如何调查导致此内存泄漏的原因?

理想情况下,我正在寻找可以在系统上执行的故障排除步骤,而不必打扰开发团队。

附加信息:

OS: RHEL 5.6
PHP: 5.3
Drupal: 6.x
MySQL: 5.6
Run Code Online (Sandbox Code Playgroud)

仅供参考,我们知道我们正在单独调查的交换问题,与我们在交换开始发生之前观察到的内存泄漏无关。

linux php memory drupal apache-2.2

17
推荐指数
1
解决办法
4万
查看次数

所有 PHP 站点都停止在 IIS7 上工作,内部服务器错误 500

我在 Windows Server 2008 上使用 Web 平台安装程序安装了多个 drupal 7 站点。

直到知道他们工作没有任何问题,但最近内部服务器错误 500 开始出现(每隔这么多请求一次),现在它发生在任何 php 站点的所有请求中。

没有太多细节可以继续,从它工作到现在之间没有任何变化(反正我什么都不知道)

日志文件中充斥着诸如

[09-Aug-2011 09:08:04] PHP Fatal error:  Allowed memory size of 262144 bytes exhausted (tried to allocate 261904 bytes) in Unknown on line 0
[09-Aug-2011 09:08:16] PHP Fatal error:  Allowed memory size of 262144 bytes exhausted (tried to allocate 261904 bytes) in Unknown on line 0
[09-Aug-2011 09:08:16] PHP Fatal error:  Allowed memory size of 262144 bytes exhausted (tried to allocate 261904 bytes) in Unknown …
Run Code Online (Sandbox Code Playgroud)

iis php windows-server-2008 drupal web-platform-installer

7
推荐指数
1
解决办法
2729
查看次数

大型 Drupal 站点的服务器场设置

我正在建立一个大型 Drupal (Pressflow) 站点,这是我目前的计划。我有没有做过什么明显愚蠢的事情?有没有人有过像这样托管大型多服务器 Drupal 安装的经验?

基础设施

drupal web-farm

6
推荐指数
1
解决办法
2062
查看次数

负载平衡 Drupal 服务器:在服务器之间共享数据的好方法?

我正在尝试概述我将如何创建负载平衡的 Web 服务器设置。设置实际的负载平衡器并添加两个或更多 Web 服务器似乎很公平。但是,我无法决定文件的最佳设置是什么。

Web 服务器将运行 CMS 系统(在本例中为 Drupal)。可能有用户上传的与内容相关的文件,所有网络服务器都应该可以访问这些文件。现在,我想简单地拥有一个指定的文件服务器并在每个 Web 服务器上安装一个文件目录,以便各种 Web 服务器可以访问这些“共享”文件。

但是,如果我们谈论的是 4-5 个服务器,这个解决方案会成为瓶颈吗?我认为安装将通过 SSH 完成。

高度赞赏所有帮助!

更新(2013 年 1 月 15 日)

我决定结合使用 Csync2 和 Lsyncd。然后我设置了两个充当镜像的服务器。Lsyncd 侦听某些目录(及其子目录)中的更改并调用负责将文件同步到其他服务器的 Csync2。如果您有兴趣了解更多信息,请查看本教程

cluster scaling web-server load-balancing drupal

6
推荐指数
3
解决办法
6621
查看次数

选择的开源 CMS 是什么?

有人告诉我,Sitecore 是首选的闭源 CMS(由于其疯狂的灵活性)。

也就是说,什么是开源等价物?或者有吗?我玩过 Drupal,它似乎更像是一个博客平台而不是一个 CMS。你有不一样的体验吗?你喜欢不同的CMS吗?

drupal content-management cms open-source

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

MySQL 在(本地)网络上的性能比我预期的要慢得多

我的生产环境中的 MySQL 查询花费的时间也比我预期的要长得多。有问题的站点是一个相当大的 Drupal 站点,安装了许多模块。网络服务器 (Nginx) 和数据库服务器 (mysql) 托管在不同的机器上,通过 100mbps 的 LAN 连接(由 Rackspace 托管)连接。

我在我的笔记本电脑上运行完全相同的站点以进行开发。显然,在我的笔记本电脑上,网络服务器和数据库服务器在同一个机器上。

以下是我的数据库查询时间的结果:


生产:

在 320.33 毫秒内执行了 291 次查询。(主页)

在 999.81 毫秒内执行了 517 次查询。(内容页)

发展:

在 46.28 毫秒内执行了 316 次查询。(主页)

在 79.09 毫秒内执行了 586 次查询。(内容页)


从这些结果中可以清楚地看出,在我的笔记本电脑上查询 MySQL 数据库所涉及的时间要短得多,其中 MySQL 服务器与 Web 服务器运行在同一数据库上。

为什么是这样?!

一个因素必须是网络延迟。从 Web 服务器到数据库服务器的往返平均需要 0.16 毫秒(由 ping 显示)。必须将其添加到每个单个 MySQL 查询中。因此,以上面的内容页面为例,其中执行了 517 个查询。仅网络延迟就会使总查询时间增加 82 毫秒。但是,这并不能解释我所看到的差异(笔记本电脑上的 79 毫秒与生产盒上的 999 毫秒)。

我还应该考虑哪些其他因素?我曾考虑将 NIC 升级到千兆连接,但显然还涉及其他问题。

我已经从http://www.day32.com/MySQL/运行了 MySQL 性能调整脚本,它告诉我我的数据库服务器配置良好(显然比我的笔记本电脑好)。报告的唯一问题是“在 4394 个临时表中,48% 是在磁盘上创建的”。在两种环境和生产环境中都是如此,我什至尝试将 max_heap_table_size 和 Current tmp_table_size 增加到 …

mysql networking performance latency drupal

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

如何使用 nginx 设置私有 CDN?

问题是:我在欧洲有一台 Linux 服务器,使用 nginx+php-fpm 为繁忙的 Drupal 站点提供服务,我在美国有另一台 Linux 服务器(我的大部分访问者来自那里)。第二台服务器严重不足。我想知道如何利用第二台服务器来提供我网站的静态内容?

nginx drupal cdn

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

整整 60 秒后清漆 503 错误...如何更改此超时值?

我在 Drupal 站点上通过 Apache 运行 Varnish。我有一个 PHP 脚本,它在我网站的某个路径上执行,需要很长时间……比如 60 - 120 秒。尝试访问该页面时,Varnish 总是在 60 秒后给我 503 大师冥想超时。

我已经尝试将 Varnish connect_timeout 设置为一个非常高的值......我已经尝试将 Apache 的 php.ini 中的所有超时设置为非常高的值......但没有运气:Varnish 在 60 秒后一直给我 503 错误.

所以这是我的问题:这个 60 秒超时值来自哪里?我在这里拔头发...

(仅供参考:如果我从图片中取出 Varnish,Apache 在 60 - 120 秒后按预期提供页面,这让我认为超时必须在 Varnish 一侧的某个地方......)。

php timeout varnish drupal apache-2.2

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

nginx - 出于安全原因拒绝除 index.php 之外的所有 *.php 请求

操作系统:CentOS 7
nginx:1.6.2
httpd:apache 2.4.6
cms:Drupal 7

在我的服务器遭到入侵后,我从服务器中删除了所有内容,重新安装了操作系统和软件,并从备份中恢复了数据。现在我以最大安全性方式配置所有服务。

在详细研究访问日志后 - 我决定拒绝任何对 php 文件的请求,除了位于站点文档根目录中的index.php以提高安全性。

Nginx 访问日志内容很多,比如:

azenv2.php
az.php
Run Code Online (Sandbox Code Playgroud)

/*/wp-login.php
/administrator/index.php
/MyAdmin/index.php
Run Code Online (Sandbox Code Playgroud)

第一类 - 后门(其中一个入侵了我的网站,有人从我的服务器发送了大量垃圾邮件)。

第二 - 有人想找到流行的 cms 和实用程序并尝试使用 login@password,例如 admin@123456

我通过拒绝对 php 文件的请求来阻止这两个类别的原因是:

  1. 即使有人会上传 php-shell -也不可能使用它

  2. 所有这些请求都是“不好的”修道院 - 由 nginx 拒绝它们将保护 drupal(httpd+php+mysql) 工作并消耗能量。

我当前对一台虚拟主机的配置:

server {

  listen <server-ip>;
  server_name <site-name>;

  location ~* /sites/default/files/styles/ {
    try_files $uri @imagestyles;
  }

  location @imagestyles {
    proxy_pass http://127.0.0.1:<port>;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    access_log off;
  }

  location …
Run Code Online (Sandbox Code Playgroud)

security php configuration nginx drupal

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

为什么 Varnish 不缓存?

我正在对 Ubuntu 服务器上的 Varnish 3.x 设置进行故障排除。我通过基于命名的虚拟主机在两个站点上运行 Drupal 7。在尝试让 Varnish 与 Drupal 良好配合之前,我尝试将 Varnish 从缓存中转换为 PNG。

curl -I以下是我从PNG 文件请求中获得的标头:

HTTP/1.1 200 OK
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Sun, 07 Oct 2012 21:18:59 GMT
ETag: "a57c2-3850-4cb7ea73db6c0"
Accept-Ranges: bytes
Content-Length: 14416
Cache-Control: max-age=1209600
Expires: Thu, 25 Oct 2012 22:55:14 GMT
Content-Type: image/png
Accept-Ranges: bytes
Date: Thu, 11 Oct 2012 22:55:14 GMT
X-Varnish: 1766703058
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: MISS
Run Code Online (Sandbox Code Playgroud)

以下是同一文件的标头,但绕过了 Varnish(端口 8080):

HTTP/1.1 200 OK
Date: Sat, 13 Oct 2012 …
Run Code Online (Sandbox Code Playgroud)

cache varnish drupal apache-2.2 drupal7

4
推荐指数
1
解决办法
2万
查看次数