我有一台服务器正在closures(networking方面),但最近却保持正常运行时间(所以服务器并没有失去它的能力)。 我已经要求我的托pipe公司进行调查了,经过调查,我被告知,Apache和MySQL始终使用80%的内存,最高达到95%,我可能需要添加更多的内存服务器。
他们添加更多内存的理由之一是我使用默认的最大连接设置(MySQL为125,Apache为150),为了处理这150个同时连接,我至less需要3GB内存,而不是1GB。在这一刻。
现在,我明白,调整最大连接可能会比我更好的离开默认设置,虽然我现在不觉得这是一个问题,有相同的configuration服务器处理比当前1或2访问者更多的stream量发射,告诉自己我会调整它取决于访问模式后。
我也一直都知道,Apache在缺省设置下比其竞争对手如nginx和lighttpd更加渴望内存。 尽pipe如此,看着我的机器的数据,我想看看我的托pipe公司如何得到这些数字。
我越来越:
# free -m total used free shared buffers cached Mem: 1000 944 56 0 148 725 -/+ buffers/cache: 71 929 Swap: 1953 0 1953
我猜这意味着是的,服务器目前预留了大约95%的内存,但是我也认为这意味着1000个应用程序中只有71个应用程序正在使用caching/caching行。
另外我没有看到任何交换:
# vmstat 60 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 0 0 0 57612 151704 742596 0 0 1 1 3 11 0 0 100 0 0 0 0 57604 151704 742596 0 0 0 1 1 24 0 0 100 0 0 0 0 57604 151704 742596 0 0 0 2 1 18 0 0 100 0 0 0 0 57604 151704 742596 0 0 0 0 1 13 0 0 100 0
最后,在请求页面时:
top - 08:33:19 up 3 days, 13:11, 2 users, load average: 0.06, 0.02, 0.00 Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie Cpu(s): 1.3%us, 0.3%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1024616k total, 976744k used, 47872k free, 151716k buffers Swap: 2000052k total, 0k used, 2000052k free, 742596k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24914 www-data 20 0 26296 8640 3724 S 2 0.8 0:00.06 apache2 23785 mysql 20 0 125m 18m 5268 S 1 1.9 0:04.54 mysqld 24491 www-data 20 0 25828 7488 3180 S 1 0.7 0:00.02 apache2 1 root 20 0 2844 1688 544 S 0 0.2 0:01.30 init ...
所以,我想知道,serverfault的专家:
谢谢你的帮助!
根据这里的快照,内存利用率看起来不错,升级不是必要的(可能不会有帮助)。
Free&Top都表示只有50 MB左右的空闲空间,但是在占用缓冲区的时候,这个数字要高得多。 Linux将使用任何未分配/未使用的物理RAM作为caching和缓冲区空间。 如果您的应用程序需要更多的内存,brk&sbrk会将其从caching中抽出。 性能影响会更频繁发生,但这根本不是问题。
现在,在高stream量或维护脚本运行的时候,您确实很可能会出现这种情况。 你是否有任何计划执行大型查询作为清理过程或其他任何部分的cron作业? 有没有什么可能会暂时吞噬内存,然后释放它? 帐户冻结批量作业或任何?
所有这一切,你能再描述一下你的问题吗? 如果你无法ping通系统,我高度怀疑这是一个内存问题。 你的服务器是否会离开一段时间然后回来? 在这段时间内检查你的networking服务器日志,是否有一段时间不活跃的每个人,或只是你? 如果你的机器刚刚从地球上脱落了一段时间,我会投票说这是networking相关的东西。
那么dmesg的输出呢? networking设备错误?
他们如何计算150个同时连接,我需要3Gb?
一个Apache客户端的平均内存为150 *(他们显然决定为20 MB)。
“当前1或2名游客在午餐前”
如果你有1-2个访问者,问题不是最大连接,可能不是内存问题,而是一个configuration问题。 对于索引和查询caching,它可能会成为Mysql保留的高速cachingRAM。
您的apache使用的内存取决于php的内存使用情况,从已加载的apache和php模块数量以及连接数量。
你总是想检查最糟糕的情况:
MEMOF(最大php mem,最大加载模块)x最大apache连接
你总是想避免进入交换,所以结果应该比你的物理内存less。
你也有MySQL服务器运行,所以你必须考虑它最大的内存使用情况。
你可以做很多的configuration优化,以减less内存使用,同时保持您的网站快速和稳定(在serverfaultsearch – 在这里你可以find有用的讨论)。