我正在维护和计划在Ubuntu上运行Apache2的EC2服务器实例,该实例每小时接收大约10000(非常简单)的请求。 这只是一些数据来自POST和一个虚拟的纯文本连字符响应。
随着时间的推移,请求数量将逐渐增加,达到每小时一百万左右。
我如何(可靠地)检测到服务器已经瘫痪,不再能够处理传入的请求?
我现在正在做的只是检查内存和CPU负载htop – 如果那些不满容量,那么我认为一切都很好。
我认为你正在看系统资源。 负载平均,IO负载,内存,交换,CPU等…
您可能会从Apache内部状态的某些细节中受益,比如它正在执行的stream程。
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正在使用的后端服务(如数据库服务器等)的性能。
关于量化apache对最终用户的性能,服务响应的时间是有用的,并且随着服务器上的负载而增加。 我通常会将此值的logging与某些Web分析软件(如awstats或webalizer)结合使用。
不幸的是,默认的日志格式不显示这个,所以我在我的apache中使用自定义的日志格式,这是一个例子;
# Define logfile format used for response time analysis LogFormat "\"%{%Y-%m-%d %H:%M:%S}t\" %V %m \"%U\" \"%q\" %{Content-Type}o %s %B %O %D" responsetime CustomLog "/var/log/apache2/responsetime.log" responsetime
自定义日志格式指令%D给出请求时间;
%D服务请求所用的时间,以微秒为单位。
Apache文档:
http://httpd.apache.org/docs/current/mod/mod_log_config.html
从这里的例子;
http://www.moeding.net/archives/33-Logging-Apache-response-times.html
免责声明:我在www.mosoplot.com上工作,可自动执行此处所需的大部分容量规划。 我用MOSOplot中的一些图表来演示如何做到这一点。
这是我如何做networking服务器的容量规划。
首先考虑的是使用Htop / top不适合这种分析。 他们只展现了最极端的短期观点,这对于性能分析来说是非常有用的,但是对于容量规划来说却是一片臭屁。 你真的需要审视一个更长的时间框架来准确地判断这一点。 这就像抽样一些人来确定一个国家的宗教化妆。 你怎么知道你正在观看的短时间内代表了剩下的时间里服务器正在发生什么? 当你睡着的时候呢? 你甚至知道是否是高峰时间?
Htop默认只使用2秒间隔。 所以峰值来来去去,可能也可能不重要。 实际上,容量规划的最小间隔时间是5分钟,但我更喜欢1小时。 这将消除尖峰,以显示潜在的趋势。 这是你需要规划的。 但是,如果您有理由相信存在短期的趋势(例如,如果每个小时开始时所有的转移都发生了10分钟),那么通过一切手段来看看。
MOSOplot使用collectd代理,它能够收集apache指标以及系统指标。
要获得apache统计信息(响应时间和卷),可以使用collectd tail插件,它将读取apache日志文件并提取所需的数据。 有一个专门的Apache插件,但它没有得到响应时间。
像这样的东西应该是一个开始,以及汤姆H概括的configuration更改包括%D。
LoadPlugin tail <Plugin "tail"> <File "/var/log/apache2/access.log"> <-- PUT IN CORRECT FILENAME Instance "apache" <Match> Regex "GET.*?\\s([0-9\\.]+)\\s[0-9\\.]+$" ExcludeRegex "\\s/(favicon|wp-)" DSType "GaugeAverage" Type "response_time" Instance "last_byte" </Match> </File> </Plugin>
要看的第一个指标是响应时间 – 除非您的应用程序是批处理系统,在这种情况下您可以忽略这一点。
尝试将CPU和内存利用率与响应时间关联起来。 这会让你知道你的系统什么时候会中断。 响应时间可能会增长到正常的5倍,但之后可能会迅速恶化。 一些应用程序甚至可能不处理,所以这取决于。
这里有一个链接到一个图表,显示了比较CPU到networking服务器命中/分钟的一个例子。 在这种情况下,音量很低,看起来我们可以轻松达到15次/分钟。 cpu v点击/分钟
如果您无法收集响应时间,则需要使用固定阈值。 绝对不要等到CPU和/或内存接近满容量。 一开始,它可能会开始降低大约60%(小时平均)。 其次,亚马逊在其一些系统上使用突发模式的比例为60%,这很好地表明他们认为这是一个很好的门槛。 如果你经常超出爆发水平,那么你应该考虑升级。
内存应该可以达到90%左右,但鉴于Apache有时可能会有OOM问题(nginx更好),那么我会更高兴70%的高峰使用率。
Apache的内存使用情况往往非常不稳定。 在我们监控的一台networking服务器上,我们最终变成了nginx,因为它是一个只有1GB ram的小实例,而且apache出现了OOM错误。 下面的图表显示了与nginx相比,apache下的内存使用量是多less。 内存variables与Apache v nginx
另一件需要考虑的事情是多快才能获得升级批准 。 尽pipe在AWS上进行实际升级可能会很快,但假设您的应用程序具有可扩展性,获得批准可以在与我一起工作的大多数客户端进行升级。 给自己几周/月的空间,如果这是你所需要的。