我需要使用LAMP在运行Ubuntu的VM服务器上使用尽可能少的RAM。是否有使用最小内存的已知提示?我已经设置了MySQL缓存/子缓存,但这没什么用。
答案 0 :(得分:7)
你应该做的是保留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运行的原因。
答案 1 :(得分:2)
确保在mysql中关闭InnoDB,这将减少大约100MB的内存
答案 2 :(得分:2)
您可以将php.ini中的memory_limit
设置为更小的值。但是,如果您的程序请求的内存超过限制,则脚本将崩溃并发生致命错误。
这只会改变PHP中的内存使用量。在my.cnf中可能有类似的MySQL设置,但我不知道它会是什么。
实际上,减少内存使用量的最佳方法是编写不占用大量内存的程序。
答案 3 :(得分:2)
关于 MySQL , Apache 和其他人:http://library.linode.com/troubleshooting/memory-networking#sph_diagnosing-and-fixing-memory-issues
对于 PHP :在php.ini中,您可以设置memory_limit。
对于 Linux :使用32位版本(直到你拥有超过4Gb的RAM)。
在真正需要之前不要减少所有这些设置,否则会导致性能下降。尽量为你的系统留出足够的内存。