问题 如何配置MySQL / PHP以减少内存使用?


我需要使用LAMP在运行Ubuntu的VM服务器上使用尽可能少的RAM。是否有使用最小内存的已知提示?我已经设置了MySQL缓存/子缓存,但这没有多大帮助。


12130
2018-05-26 21:17


起源

我目前在服务器上运行5个字的新闻网站和一个Icecast服务器,其中一个流和平均5个用户在线,只有512mb的ram。我们几乎没有看到它超过50%的公羊,除非我们得到大量的听众。 - Mike Soule
减少mysql的内存使用量通常是通过减少影响性能的缓冲区/缓存大小来完成的。不要把事情拖得太低以至于MySQL无法完成它的工作。 - Marc B


答案:


你应该做的是保留Linux,Mysql和PHP,但不要使用Apache。或者至少,停止在Apache中运行PHP。

您可能正在使用Apache prefork模型和进程内PHP模块。这对于大多数工作负载的内存效率来说非常糟糕,因为即使对于刚才没有请求任何动态内容的HTTP连接,它也会保持繁重的PHP进程。

您要做的是使用另一个Web服务器(例如Nginx,但Apache也可以工作)并将PHP作为FastCGI守护程序运行。这很容易设置和谷歌搜索“PHP fastcgi”返回众多的例子。

然后,您可以使用运行PHP的少量固定数量的“重”进程(我认为每个核心不超过几个),但仍然具有运行实际应用程序的良好容量,因为“空闲”HTTP连接,例如那些服务保持活动或等待请求不会耗尽“繁重”进程,只会使用较轻的Web服务器进程。

使用有限分叉/少数进程的Web服务器可能更好 - 例如Nginx或具有不同线程模型的Apache。这与mod_php不兼容,因此您需要将其作为FastCGI运行。


7
2018-05-26 22:48



我们会研究这个,但我认为增加更多内存会更便宜。谢谢! - Lucas Famelli
我们在使用Nginx indead的Apache的同一个应用程序上运行类似的env,它运行得很好(使用内存减少了30%) - Lucas Famelli


确保你在mysql中关闭InnoDB,这将减少大约100MB的内存


2
2018-05-26 21:21



首先确保你知道这是不是一个好主意。根据应用程序的工作方式,禁用InnoDB可能存在巨大的缺点。 - ceejayoz
是的,但从他提到的应用程序,我不认为他们正在使用交易。
InnoDB比交易还要多得多。 - ceejayoz
如果您可以将其关闭,请参阅此处的说明: scorpio-jibin.blogspot.com.br/2010/01/... - Gaia
不知道为什么这个建议得到任何赞成。如果您知道自己没有使用它,请将其关闭(即便​​如此,也许您应该并且不了解与当前设置相比的优缺点,即我的MyISAM)。 - JM4


你可以设置 memory_limit 在php.ini中更小的东西。但是,如果您的程序请求的内存超过限制,则脚本将崩溃并发生致命错误。

这只会改变PHP中的内存使用量。 my.cnf中的MySQL可能有类似的设置,但我不知道它会是什么。

实际上,减少内存使用的最佳方法是编写不使用大量内存的程序。


2
2018-05-26 21:23





关于 MySQL的阿帕奇 和别的: http://library.linode.com/troubleshooting/memory-networking#sph_diagnosing-and-fixing-memory-issues 

对于 PHP:在php.ini中你可以设置 memory_limit的

对于 Linux的:使用32位版本(直到你拥有超过4Gb的RAM)。

在真正需要之前不要减少所有这些设置,否则会导致性能下降。尽量为您的系统提供足够的内存。


2
2018-05-26 21:26