【问题标题】:My server is getting high traffic and reaches his limits, what should be my new structure?我的服务器流量越来越大,达到了他的极限,我的新结构应该是什么?
【发布时间】:2020-04-14 10:28:54
【问题描述】:

当前配置:

16GO RAM,4 个 cpu 内核,Apache/2.2 使用 prefork 模块(设置为 700 maxClients,因为平均进程大小约为 22MB),启用了 suexec 和 suphp mods (PHP 5.5)。

使用 CakePHP2 并存储在 MySQL 服务器上的站点后端。该站点由前面的文本/一些压缩图像和后面的数据处理组成。

当前流量:

每天约 60000 名独立访客,在高峰期,我目前很容易达到 700 多个同时连接,这填满了 MaxClients。当我在那些时刻使用apachectl status 时,我可以看到所有进程都被使用了。

CPU 没问题。但是 RAM 正在被使用。

潜在流量

流量可能会增长到每天约 200000 名独立访问者,甚至更多。也可能不是。但如果发生这种情况,我想做好准备。由于我已经使用该配置达到了当前服务器的限制。

所以我考虑采用更大的新服务器,例如配备 192GB 内存和 20 个内核。

我可以保持完全相同的配置(这意味着我将能够使用相同的配置处理我当前的 10* 流量)。

但我想知道在我的情况下是否有更好的配置,使用更少的资源并提高效率? (事实证明确实如此)

【问题讨论】:

  • 附加信息请求。 MySQL 主机服务器上有任何 SSD 或 NVME 设备吗?在 pastebin.com 上发布并分享链接。从您的 SSH 登录根目录中,文本结果为:B) SHOW GLOBAL STATUS;至少 24 小时正常运行时间后 C) 显示全局变量; D) 显示完整的处理程序; E) 完整的 MySQLTuner 报告和可选的非常有用的信息,如果可用,包括 - htop 或 top 用于大多数活动应用程序,ulimit -a 用于 Linux/Unix 限制列表,iostat -xm 5 3 用于按设备和核心/cpu 计数的 IOPS,为服务器工作负载调优分析提供建议。
  • MySQL 主机服务器上没有 SSD 或 NVME 设备。这是包含您询问的信息的粘贴箱:pastebin.com/0GA7R3yi 过去我已经完成了一些 MySQLTuner 建议,并且刚刚意识到每个表的文件仍然处于关闭状态,因为要打开它,我必须转储并重置所有内容。 sysstat 未安装在该服务器上,因此 iostat 不能处于其当前状态。
  • 感谢您的数据。是否有机会从 mysqltuner.com 获取 Perl 脚本并发布完整报告?这将有助于按引擎了解更多关于您的系统、表数和数据大小的信息。分析正在进行中。
  • 这里是:pastebin.com/PHgZVerq

标签: php server webserver apache2 traffic


【解决方案1】:

每秒速率 = RPS

为您的 my.cnf [mysqld] 部分考虑的建议,

thread_cache_size=100  # from 8 to reduce threads_created 
innodb_io_capacity=500  # from 200 to allow higher IOPS to your HDD
read_rnd_buffer_size=128K  # from 256K to reduce handler_read_rnd_next RPS of 129,942
thread_concurrency=6  # from 10 to expedite query completion with your 4 cores
slow_query_log=ON  # from OFF to allow log research and proactive correction

这些更改将有助于减少 CPU BUSY。

观察: A) 5.5.54 已结束生命周期,新版本的性能更好。 B) 这些建议只是可能改进的开始,即使是 5.5.4。 C)您应该能够优雅地迁移到 innodb_file_per_table 一次 你打开选项。您的表已由 innodb 引擎管理。

如需其他帮助,包括免费下载实用程序脚本,请查看我的个人资料、网络个人资料。

【讨论】:

  • 感谢您的建议。 mysql使用的CPU其实还不错,主要占几个百分点。但优化总是好的。我还有几个问题。 A/您知道如何显着减小 AVG apache2 进程大小吗? B/ 您认为使用 mpm_event_module 而不是 prefork 迁移到 PHP-fpm 是个好主意吗? C/ 如果有,有多大帮助?
  • 你好威尔逊。感谢您对mysql 的建议,我还没有进行这些更改,因为mysql 在生产环境中运行得非常顺利,并且只占用了大约 2% 的 CPU。前段时间我已经使用MySQLTuner 对其进行了罚款,我想它可以处理 conf 方面的大行。我已经在另一边处理过慢查询。但我会考虑您的建议,以备日后需要。
  • 关于You should be able to gracefully migrate to innodb_file_per_table once you turn on the option. Your tables are already managed by the innodb engine,事实上是在mysql.conf中设置了on,即使现在我重新启动它仍然是off:/innodb_file_per_table = ONinnodb_log_file_size = 1Gmy.cnf[mysqld]部分中
  • 我应该在此之前停止并备份所有数据库吗?每张桌子一个文件真的会更好吗? (仅主要使用 2 个表,并且都有超过数百万行)。我在 apache2 上将 mpm_prefork 切换为 mpm_worker,它比以前做得更好。虽然仍在使用大部分 RAM。
  • 我在网上搜索了为什么innodb_file_per_table 应该转为ON 并且有些人选择保留它,因为你可能会降低性能。这取决于数据库。在我的情况下,我几乎只有一两个使用的大桌子。所以我不确定更改该变量是否一定是个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2010-11-12
相关资源
最近更新 更多