我正在维护和规划一个在 Ubuntu 上运行 Apache2 的 EC2 服务器实例,该实例目前每小时接收大约 10000 个(非常简单的)请求。这只是一些通过 POST 传入的数据,并以一个虚拟的纯文本连字符作为响应。
随着时间的推移,请求的数量将逐渐增加,达到每小时一百万左右。
我如何(可靠地>)检测到服务器已经瘫痪并且不再能够处理传入的请求?
我目前正在做的只是检查内存和 CPU 负载htop
——如果它们没有接近满容量,那么我认为一切都很好。
我正在维护和规划一个在 Ubuntu 上运行 Apache2 的 EC2 服务器实例,该实例目前每小时接收大约 10000 个(非常简单的)请求。这只是一些通过 POST 传入的数据,并以一个虚拟的纯文本连字符作为响应。
随着时间的推移,请求的数量将逐渐增加,达到每小时一百万左右。
我如何(可靠地>)检测到服务器已经瘫痪并且不再能够处理传入的请求?
我目前正在做的只是检查内存和 CPU 负载htop
——如果它们没有接近满容量,那么我认为一切都很好。
关于量化 apache 对最终用户的性能,提供响应所花费的时间很有用,并且会随着服务器上的负载而增加。我通常将此值的记录与一些网络分析软件(如 awstats 或 webalizer)结合起来。
不幸的是,默认日志格式没有显示这一点,所以我在我的 apache 中使用了自定义日志格式,这是一个示例;
自定义日志格式指令 %D 给出请求时间;
Apache 文档:
http ://httpd.apache.org/docs/current/mod/mod_log_config.html
这里的例子;
http://www.moeding.net/archives/33-Logging-Apache-response-times.html
我认为您在看系统资源是正确的。平均负载、IO负载、内存、交换、CPU等...
您可能会从有关 Apache 内部状态的一些细节中受益,比如它的进程实际在做什么。
http://www.tecmint.com/monitor-apache-web-server-load-and-page-statistics/
mod_status 可以从 www.apache.org 向您展示的示例
http://www.apache.org/server-status
这可能有助于随着时间的推移收集信息,以便以后整体查看
https://httpd.apache.org/docs/2.4/programs/log_server_status.html
根据您的设置,您需要独立观察 Apache 使用的后端服务的性能,例如数据库服务器等。
这就是我为 Web 服务器进行容量规划的方式。
第一个考虑是使用 Htop/top 不适合这种分析。它们只显示最极端的短期视图,这对于性能分析非常有用,但对于容量规划来说很糟糕。您确实需要查看更长的时间范围才能准确判断这一点。这就像对几个人进行抽样以确定一个国家的宗教构成。你怎么知道你正在观看的那一小段时间代表了服务器在其余时间发生的事情?睡着了怎么办?你甚至知道这是不是高峰时间?
默认情况下,Htop 也只使用 2 秒的时间间隔。所以尖峰来来去去,它们可能重要也可能不重要。实际上,容量规划的最小间隔是 5 分钟,但我更喜欢 1 小时。这将消除峰值以显示潜在趋势。这就是你需要计划的。但是,如果您有理由相信存在短期趋势(例如,如果所有转移都在每小时开始时发生 10 分钟),那么请务必注意这一点。
第 1 步:收集数据并存储。
MOSOplot 使用 collectd 代理,它能够收集 apache 指标以及系统指标。
要获取 apache 统计信息(响应时间和数量),您可以使用 collectd tail 插件,该插件将读取 apache 日志文件并提取您需要的数据。有一个专用的 apache 插件,但它没有得到响应时间。
像这样的事情应该是一个开始,以及 Tom H 概述的配置更改,包括 %D。
第 2 步:查看关键资源指标
要查看的第一个指标是响应时间 - 除非您的应用程序是批处理系统,在这种情况下您可以忽略它。
尝试将 CPU 和内存利用率与响应时间相关联。这将使您了解系统何时会崩溃。响应时间可能会增长到正常的 5 倍,但之后可能会迅速恶化。有些应用程序甚至可能无法处理,所以这取决于。
这是一个图表链接,该图表显示了将 CPU 与网络服务器点击次数/分钟进行比较的示例。在这种情况下,交易量很低,看起来我们可以轻松地达到 15 次点击/分钟。 cpu v 点击/分钟
第 3 步:何时升级
如果您无法收集响应时间,则需要使用固定阈值。绝对不要等到 CPU 和/或内存接近满容量。首先,它可能会在 60% 左右(每小时平均)开始下降。其次,亚马逊在他们的一些系统上使用了 60% 的突发模式,这很好地表明他们认为这是一个很好的阈值。如果您经常超过突发级别,那么您应该考虑升级。
内存应该可以达到 90% 左右,但考虑到 apache 有时可能会出现 OOM 问题(nginx 在这方面做得更好),那么我会更高兴 70% 的峰值使用率。
Apache 在内存使用方面往往非常不稳定。在我们监控的一个网络服务器上,我们最终更改为 nginx,因为它是一个只有 1GB 内存的小实例,而 apache 正在遭受 OOM 错误。这是一张图表,显示了与 nginx 相比,apache 下的 RAM 使用量跳跃了多少。 apache v nginx的内存变量
这里要考虑的另一件事是您能多快获得升级批准。虽然实际上在 AWS 上升级可能很快,但假设您的应用程序是可扩展的,那么在与我合作的大多数客户中获得升级批准是非常缓慢的!如果你需要的话,给自己几个星期/几个月的空间。