我如何监视哪个进程正在交换?

我有一个Linuxnetworking服务器。 它运行着Apache和一个基于python的web应用程序和postgres。 这很慢。 通过运行ab (apache基准testing)和vmstat我可以看到当请求进入时它正在交换

有没有什么程序能dynamic地告诉我哪个进程导致了这个swappyness?

iotop可能是你以后。 您需要安装Python 2.5或更高版本,这很可能。 您还需要启用一些内核(2.6.20或更高版本)选项(TASK_DELAY_ACCT和TASK_IO_ACCOUNTING),以便正确的度量值显示在/ proc中供iotop使用。

你一定要从apache中删除所有不必要的模块。 这很重要。 closures扩展状态,自动索引等

将AllowOverride设置为“None”,并在服务器configuration中执行任何htaccess的东西将有助于I / O,并减less响应时间,这将导致每分钟内存使用量更less。

请参阅Apache性能指南 。

还可以查看postgresql文档,以提高性能并减less内存使用量。

可能你最大的内存是python程序,因为python没有针对低内存使用进行非常优化。 您可以尝试应用程序上的分析器。

如果这个活动是在执行许多HTTP请求的时候,而不是在其他时候,那么它将是主动引起交换活动的Apache和python进程。

没有什么比这更多,我们可以说没有一点点信息。

  • 你如何运行Python脚本? (CGI,FCGI,mod_python,其他?)
  • ab被告知要尝试多less个并发请求?
  • 机器有多less内存? (这可能只是机器的工作量不足)
  • 有多less个Apache进程正在运行?
  • 如果FGCI,您有多less个Python进程正在运行?

一般来说,为了减lessApache内存的使用,你需要通过改变configuration文件来减lesssubprocess的数量,如果你使用的是FastCGI,那么对于python进程的数量是一样的。

但潜在的问题是…

我们无法看到或知道Linux如何用当前的ps或top命令处理内存。 这是一个谜。

而更多的多核系统,Linux系统会计应用程序需要改进