我应该在小型服务器上维护多少可用内存?

我应该在小型服务器上维护多少可用内存?

由于预算限制,我使用 DigitalOcean 提供的最小 droplet,它正在为客户运行一个小型(4 或 5 个用户)旧版 php 应用程序,直到我可以为他们重写它。我刚刚安装了 redis,以尝试提高一些较昂贵的数据库查询的性能。我查看了底部列出的问题,并认为我仍然需要问这个问题。我不想在这个阶段进行“容量规划”。我只想根据下面引用的 redis 问题的公认答案,为 maxmemory 提出一个所谓的“<合理值>”,基于在 CentOS 6.9 上运行的 apache httpd 2.2.15、php 5.3.3 和 mysql 5.1.73 的典型需求(就像我说的,遗产)。

输出免费-h当没有人使用应用程序时

             total       used       free     shared    buffers     cached
Mem:          1.0G       809M       197M       368K       179M       484M
-/+ buffers/cache:       145M       860M
Swap:           0B         0B         0B

我担心的是/etc/php.inimemory_limit = 256M我对输出config get maxmemory感到震惊redis-cli,因为默认设置似乎不会打扰根本找出系统上实际可用的内容。

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "3221225472"

我的直觉告诉我,如果我天真地将 memory_limit 和 maxmemory 都设置为 98M,那么当应用程序以最大容量运行时,系统突然决定启动一些随机的管理进程,或者我需要进入 vi 来即时修复某些问题(我不会这样做),我将会遇到麻烦。曾经在生产机器上执行此操作)。嗯,我刚刚意识到我甚至没有考虑mysql的工作内存......请注意#551727讨论了调整策略,但实际上并没有回答有关应维护多少可用内存的问题。

研究的问题:

您能帮助我进行容量规划吗?

我的网络服务器应该有多少可用内存?

https://stackoverflow.com/questions/33115325/how-to-set-redis-max-memory

答案1

容量规划是不可避免的。正如您链接的答案所说,“视情况而定”。

保持足够的可用内存(也称为缓存,因为您不会有任何未使用的空闲内存)。“足够”意味着内存压力不会在尝试回收时严重减慢速度。最坏的情况是,OOM​​ 杀手是个坏消息。


现在,要回答许多问题才能得出定量估计。考虑开始使用电子表格,有几个...

多少秒的响应时间是可接受的性能?从用户代理的角度来看,现在的请求速度有多快?

负载下的主机内存情况如何?记录所有/proc/meminfo具有更具体小计的内存。

5 个用户是预期的最大数量吗?这是并发用户吗?也许你可以使用 5 个或更少的工作进程。

这个盒子上有 MySQL 吗?当所有参数加起来时,它的最大配置内存消耗是多少?最有可能来自innodb_buffer_pool_size,也可能来自max_connectionssort_buffer_size。例如使用https://www.mysqlcalculator.com/https://launchpad.net/mysql-tuning-primer

httpd 是如何配置的?有多少个 worker?php 是 mod_php 还是 fpm?每个 httpd 进程的 RSS 典型值是多少,例如来自top

关于“更昂贵的数据库查询”。慢查询日志是什么样的?查询可以更高效吗?

关于添加缓存层。重复查询是否会从此类缓存中受益?您是否需要编写代码来利用缓存,或者它已经在应用程序中了?您的宝贵 MB 是否更适合花在 DB 缓冲区上?即使在最小大小的情况下,我仍然会预算几百 MB 来添加 Redis。

相关内容