Bre*_*nt 7 analysis metrics virtualhost apache-2.2
我有一个运行许多 VirtualHosts 的 apache 网络服务器。
最近它一直停滞不前并且没有响应,我想知道如何确定哪些 VirtualHosts 导致了大部分问题。过去,我们曾遇到过个别站点代码中的错误导致整个服务器瘫痪的情况。我的目标是能够快速诊断这些实例。
我正在使用munin监视服务器,并注意到 apache 进程的数量、内存使用量和负载在相关期间往往非常高。问题是,这些统计数据是针对整个网络服务器的,而不是针对单个 VirtualHost 的。
我已经编写了一个脚本来解析每个 VirtualHost的网络日志流量,但这似乎还不够。我可能需要确定每个 VirtualHost 负责多少个 apache 进程,或者他们让每个进程打开多长时间- 或者每个进程负责多少内存使用。
我在哪里可以找到这些信息? 我不介意编写一个脚本来跟踪这些数据,但我一开始不知道从哪里提取它。
我知道 mod_status 并不总是可用且始终可用,但它和 apachetop 是诊断这些问题的最佳方法。然而,给猫剥皮的方法有很多种。
这个技巧在许多情况下都很有用,并且不仅仅是 Apache 特有的。然而,它确实取决于许多因素,您需要知道它在做什么才能知道它的局限性。
for pid in `pgrep -u www-data`; do find /proc/${pid}/cwd -printf "%l\n" ; done
Run Code Online (Sandbox Code Playgroud)
让我们来分解一下:
该技巧有两个主要注意事项:
1) 如果在与 Apache 进程相同的上下文中运行的某些东西在 VirtualHost 目录之外执行 chdir(),那么您将很难找到它。
例如,在 mod_php 下运行的 PHP 脚本(CGI 会有所不同,因为 Apache fork 是一个单独的进程,但我假设 CGI 不是问题,或者您可以更轻松地跟踪它们)。
2) 如果您有 Apache 实例,它们可以非常快速地提供页面(例如小型静态 HTML 页面)。这通常不是问题,但也有可能。如果您收到很多“没有这样的文件或目录”错误,这基本上就是它的表现。我希望有一些,但不是大多数,除非它们适合这种特殊情况。基本上,这是因为当您检查 /proc 时,您使用 ps 扫描的 Apache 进程已经退出。显然,这意味着他们提供页面的速度非常非常快。
关于内存绑定的 Apache 进程,我使用ps_mem.py来计算网络服务器上的内存使用情况。如果您有大型 Apache(就驻留内存大小而言)进程并且它们快速退出,这大致相当于要求一个大胖子继续运行 100m 冲刺。如果您的网络服务器不是共享的,那么这些“没有这样的文件或目录”错误通常是将某些内容移动到较小的轻量级网络服务器(例如 nginx / lighttpd)或开始大量缓存内容(例如 varnish / squid)的好候选者。
归档时间: |
|
查看次数: |
5698 次 |
最近记录: |