【问题标题】:Memory usage high on server compared to wamp与 wamp 相比,服务器上的内存使用率很高
【发布时间】:2015-06-15 09:45:44
【问题描述】:

最近我的网站(有 260000 条帖子、12000 张图片、2,360,987 行 mysql 行和 450.7 MiB 大小)运行缓慢,有时几分钟内无法加载

我安装了这个调试栏插件https://wordpress.org/plugins/debug-bar/

内存使用

在服务器上是:174,319,288 字节

Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz , 16 GB (PHP:5.5.23,MySQL:5.6.23,Apache 2.4)

即使尝试禁用所有插件也无济于事......它下降了 160-163,xxx,xxx 字节

wamp 是:37,834,920 字节

(PHP:5.5.12,MySQL:5.6.17)

为什么差异很大?如何发现问题?

一直在使用以下插件

Acunetix WP 安全性 阿基斯梅特 反垃圾邮件蜜蜂 CloudFlare 联系表格 7 自定义帖子类型 UI 调试栏 登录锁定 重定向 主题试驾 W3 总缓存 WordPress 搜索引擎优化 WP-优化 WP 错过时间表

上述服务器的 my.cnf 值为

[mysqld]
slow-query-log=1
long-query-time=1
slow-query-log-file="/var/log/mysql-slow.log"
default-storage-engine = MyISAM
local-infile = 0
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_file_per_table=1
innodb_stats_on_metadata=0

max_connections=360
wait_timeout=60
connect_timeout = 15

thread_cache_size=20
thread_concurrency=8

key_buffer_size = 1024M
join_buffer_size = 2M
sort_buffer_size=1M

query_cache_limit=64M
query_cache_size=128M
query_cache_type=1

max_heap_table_size=32M
tmp_table_size=32MB
table_open_cache=1000
table_definition_cache=1024

open_files_limit=10000

max_allowed_packet=268435456


low_priority_updates=1
concurrent_insert=2


#port = 8881
#innodb_force_recovery=0
#innodb_purge_threads=0

【问题讨论】:

  • 您是否让 wamp 运行了一段时间并为其提供与另一个相同数量(和种类)的流量?
  • 尝试重新启动服务器并在初始时刻检查它
  • 从我的角度来看,这似乎是在使用非常少量的内存,即使在服务器上也是如此。当然,两者之间大约有 130MB 的差异,但是您使用 174 MB 内存的服务器似乎不太可能导致问题。您应该尝试诊断减速实际发生的位置。和网络有关吗?服务器相关?如果它与服务器相关,是否有任何一个 pid 使用比预期更多的资源? (cpu 或 ram)如果您发现它与网络相关,请联系您的主机。
  • 你们有相同的 PHP 版本吗?真的都一样吗?您是否使用实时数据库的转储进行了测试?
  • @Stony 我备份了整个站点并在 wamp 上恢复并尝试检查它。上面披露了 php 版本...我的电脑运行在 i7 4770 @ 3.4GHz 和 8GB 内存

标签: php mysql wordpress performance server


【解决方案1】:

“服务器”有 Apache;这说明了一些(全部?)差异。

Windows 和 Unix 以不同的方式处理内存,并以不同的方式测量它。因此,差异可能无关紧要。

你引用的数字不大;有什么问题?

“尝试重新启动服务器并在最初的时候检查它”——这几乎是无关紧要的。程序往往会随着时间的推移而增长,达到一定限度。让我们看看典型负载下的“稳态”值。

您有足够的 RAM 将整个数据集缓存在 RAM 中。但是,由于不活动,可能大部分数据都没有被触及,因此没有被读入缓存。

“高”内存使用是在您进行交换时。实际上,这可能是“太高了”。所以,比如说,90% 是“高”的。你的数字远不及这个。

innodb_buffer_pool_size=200M -- 不足以容纳整个 450.7MB 数据集,但正如我所说,大部分数据可能没有被积极使用。

编辑(发布设置后)

table_cache=10M

这太可怕了!您不会打开 1000 万张桌子。将其设置为 1000。

max_heap_table_size=512M
tmp_table_size=512MB

那些是危险的。如果您有多个连接,每个连接都需要一个 tmp 表(因为查询复杂),那么您可能会很快耗尽内存。将它们设置为 32M。

innodb_force_recovery=3

注释掉那一行——它只被使用一次,然后被删除。

其余设置看起来对本次讨论无害。

【讨论】:

  • 我面临的问题是服务器突然变得无响应(必须等待太久或通过主机控制面板重新启动)并且没有任何工作(站点、whm、ssh )... 该服务器上的平均负载达到 250+ 类似于负载平均值:251.42 261.23 279.09
  • 将 my.cnf 值添加到上面发布...请查看它们并建议我,因为我的大部分安装都是 wordpress
  • 啊哈。平均负载 = 250 太糟糕了。现在,如果我能记住是什么原因造成的。也许 client 上的某些东西陷入了循环,从而创建了越来越多的连接。建议在窗口中运行“top”,并希望下次发生这种情况时,“top”输出仍然可见并且有助于找到罪魁祸首。
  • 我不认为 MySQL 是罪魁祸首。即使 MySQL 在“top”的顶部,也需要调查的是 client(s)
  • 看不到它何时发生,但突然间它变得那么高......一旦我能够在它无响应时使用 whm,因为看到负载增加到那么高......我添加了我的旧my.cnf 之前我在没有加载 mysql 时使用的...现在添加了正确的建议。
猜你喜欢
  • 2020-08-14
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2018-02-01
  • 2018-07-08
相关资源
最近更新 更多