我们在 Ubuntu LTS 虚拟机 (VMWare) 上安装了 Drupal 7,在同一台物理服务器上安装了 MySQL 5.1 服务器,但在不同的虚拟机上。
Drupal 网站目前正在开发中,因此几乎没有流量,但是,尽管 ping 和 shell 访问速度快如闪电,但 Drupal 网站运行速度非常慢(>5 秒加载任何页面)。在这里和其他地方进行研究后,我了解到问题在于 SQL 是通过网络接口访问的,而 Drupal 显然做得非常糟糕。
我已经检查了 DNS 解析,Drupal 端(db 主机由 ip 给出,/etc/hosts 文件中有一个 dns 条目)和 MySQL 端(skip-name-resolve 已打开,drupal 客户端是通过 ip 地址授予访问权限)。
Drupal 开发查询日志说:
在 5993.89 毫秒内执行了 336 次查询。超过 5 毫秒的查询会突出显示。页面执行时间为 7015.35 毫秒。使用的内存:devel_boot()=5.53 MB,devel_shutdown()=93.35 MB,PHP peak=94 MB。
奇怪的是,对于单个页面加载,大约 2/3 的查询速度很快,其他的则非常慢:
1.765 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
575.825 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
13.585 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
466.9914 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache WHERE cid IN (:cids_0)
default
1.841 drupal_lookup_pathP A E
SELECT source FROM url_alias WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language ASC, pid DESC
default
通过启用 Drupal 缓存可以纠正匿名访问的情况。然而,整个管理界面仍然很慢。
目前的公司政策是单独拥有数据库服务器。是否有任何其他选项可以加快 Drupal 的速度?
默认数据库配置显示驱动程序“mysql”,也许我应该将其更改为“mysqli”或“pdo_mysql”?但是,如果我将它更改为 mysqli,database.inc 会抱怨相关的驱动程序不存在——任何专门为 drupal 安装的驱动程序,因为 mysqli 和 pdo 都在 PHP 本身中启用。
我认为您可以在两个方面优化您的网站:
您是否检查过 drupal.org上的管理站点性能?
我遇到了同样的问题,并使用 Google Chrome PageSpeed 和 YSlow 来找出我的问题。
基本上,我正在执行以下这些步骤:
尝试安装PHP APC,将 APC shm 大小设置为 256Mb(有很多指南)。然后确保Apache 的KeepAlive开启,并且也激活 Apache 压缩(通过 Apache mod_deflate)。
您可以做很多事情:
mysqld
with的性能/etc/my.cnf
:尝试探索以下内容:
我怀疑是没有足够的内存让 PHP 运行。检查
memory_limit
PHP.INI 文件。将其更改为 -1(无限内存)以查看性能是否有所提高。如果没有,那么您将长期处于困境。以下是我发表的关于提高 Drupal 性能的文章的链接由于这个问题还在招人回答,我就自己回答吧,因为我当时算是解决了。
基本上,只要我将 Mysql 移动到与 Drupal 相同的 vm,一切都变得快如闪电。所以问题是 Drupal 为每个页面加载发出的大量 sql 查询 = 糟糕的架构。