我有一台服务器(P4,512 mb DDR2 RAM),上面安装了 LAMP(Debian Lenny)。可用内存减少得非常快,我必须重新启动 apache 和 mysql 才能修复它。在 top 中,我看到很多空闲的 apache 进程,它们占用了大量内存。我该如何配置服务器来修复它?(已经将重启脚本添加到 cron,但我认为这不是一个解决方案)谢谢,抱歉我的英语不好。
输出free
:
ax-host:~# free
total used free shared buffers cached
Mem: 516048 115356 400692 0 20732 54752
-/+ buffers/cache: 39872 476176
Swap: 1515512 17568 1497944
答案1
我猜你的大部分内存都被用作磁盘缓存了——这是好事,你不需要担心,因为内核会在需要时立即将该 RAM 分配给需要它的应用程序。参见这里free
了解更多解释。如果您愿意,请发布输出以确认哪些内容在使用您的内存。
答案2
删除所有不必要的 apache 模块,或者考虑使用较小的 httpd,如 nginx 或 lighttpd。对于 MySQL,请检查 my.cnf 以查看可以降低哪些缓冲区/缓存。
答案3
您正在寻找一些调整配置,这里有一些提示:
Apache 调整技巧:http://alicayli.ksu.edu.tr/?p=74
升级 Apache!最新版本包含多项性能增强功能。
在 httpd.conf 中,设置“HostNameLookups off”,以避免对访问您网站的每个访问者进行反向 DNS 查找。
- 在 httpd.conf 中,为更繁忙的网站设置“MaxClients 230”或更高。这允许更多 httpd 守护进程同时运行,并避免阻塞进程队列。
从另一台机器提供网页图形(例如 GIF 文件)。
确保您的网页和 CGI 页面支持浏览器缓存。请参阅“面向 Web 作者和网站管理员的缓存教程”,网址为 http://mnot.cbd.net.au/cache_docs/
- 保持 Apache 精简。使用尽可能少的模块编译 Apache。在编译之前(运行 make 之前),编辑 /apache_1.xx/src/Configuration 文件,在您不需要的任何 AddModule 行前面添加 #。
- 如果您不需要流量日志(例如仅提供图形的站点),则使用 httpd.conf 中的 TransferLog 指令将日志条目重定向到 /dev/null/
- 除非您坚持使用 .htaccess 文件来控制对某些目录的访问(还有其他方法可以做到这一点),否则在 access.conf(或较新版本 Apache 中的 httpd.conf)的部分中,设置“AllowOverride None”,以便 Apache 不会在每次请求时在每个目录中寻找 .htaccess 文件。
- 不要让不必要的后台进程运行。删除无关的后台任务不仅可以提高性能,还可以提高安全性。在 /etc/rc.d/rc3.d/ 目录中 [在其他系统上,情况可能有所不同,例如,在 Debian 中,它是 /etc/rc2.d/. -D.],删除指向您不需要运行的进程的符号链接。对于 Linux 中的普通本地磁盘 Web 服务器,您只需要在 /etc/rc.d/rc3.d/ 目录中使用路由、网络、inet、httpd 和本地符号链接。如果您更改该目录的内容,请重新启动计算机。
- 不要在联网磁盘驱动器(即 NFS 联网磁盘)上提供网页或写入网络流量日志 — 仅读取和写入本地磁盘驱动器。NFS I/O 操作会产生巨大的开销。
- 不要通过 /etc/inetd.conf 中的 tcpd 包装器运行 Apache (httpd)。通过在 rc.local 文件中添加启动命令或将 httpd 启动脚本放入 /etc/rc.d/rc3.d/ 目录,可以在机器启动时启动 Apache。如果您想要某种机制来阻止 IP 地址的请求,请使用 Apache 的 conf 文件或 .htacess 文件中的“deny from”指令。
- 如果您不使用 X Windows,请不要让它在您的 Web 服务器上运行 — 只需确保在使用完毕后按 Ctrl-Alt-Backspace 键关闭 X 会话。
- 避免使用 SSI 标签。
- 在 CGI 脚本中:
- 文件 I/O:打开尽可能少的文件。务必明确关闭每个打开的文件。找到所需数据后立即停止读取文件。考虑将数据文件结构化为固定长度的字段,并使用 read() 函数跳转到需要读取的文件部分。
- Shell 命令:通过其完整路径调用 shell 命令:例如使用 '/bin/date',而不仅仅是
date
在 perl 脚本中。- 如果您的网站主要由 CGI 驱动,请务必使用 mod_perl。请参阅 http://perl.apache.org/
- Perl 程序员应该学习 Joseph N. Hall 的《Effective Perl Programming》(Addison Wesley 出版社出版)和 Tom Christiansen 的《The Perl Cookbook》(O'Reilly 出版社出版)——这两本关于优化 perl 代码的好书。例如,您可以为包含 256 个项目的哈希预分配内存,如下所示:keys(%names) = 256;
- 避免网页目录中的文件超过 1000 个。将网页文件组织到子目录中。目录中的文件越多,请求期间查找该文件所需的时间就越长。
- 网页中应尽可能少地放置图片。确保每张图片都经过图片压缩器处理。
- 对您的网站进行压力测试。在 Apache 的 /bin 或 /sbin 目录中运行 Apache Benchmark 程序(称为“ab”)。ab 程序将通过在您想要的任何网页上运行多个同时请求来模拟高流量,持续时间任意长,然后测量负载和响应时间。这对于衡量您的调整工作的效果非常有用。
- 为了获得最佳性能,请从您的 Web 服务器上拔下网线 — — 负载将几乎立即降至零!