小编fut*_*eal的帖子

性能调优高负载 Apache 服务器

我希望了解我在(对我们而言)负载较重的 Web 服务器上看到的一些服务器性能问题。环境如下:

  • Debian Lenny(所有稳定包 + 修补安全更新)
  • 阿帕奇 2.2.9
  • PHP 5.2.6
  • Amazon EC2 大型实例

我们看到的行为是,网络通常感觉是响应式的,但开始处理请求会有轻微的延迟——有时是几分之一秒,有时是我们高峰使用时间的 2-3 秒。服务器上的实际负载报告为非常高 - 通常为 10.xx 或 20.xx,如top. 此外,在这些时间(甚至vi)在服务器上运行其他东西非常慢,所以负载肯定在那里。奇怪的是 Apache 仍然非常敏感,除了最初的延迟。

我们使用 prefork 将 Apache 配置如下:

StartServers          5
MinSpareServers       5
MaxSpareServers      10
MaxClients          150
MaxRequestsPerChild   0
Run Code Online (Sandbox Code Playgroud)

和 KeepAlive 为:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Run Code Online (Sandbox Code Playgroud)

查看服务器状态页面,即使在这些负载很重的时候,我们也很少达到客户端上限,通常处理 80-100 个请求,其中许多请求处于保持活动状态。这告诉我将初始请求缓慢排除为“等待处理程序”,但我可能错了。

Amazon 的 CloudWatch 监控告诉我,即使我们的操作系统报告的负载大于 15,我们的实例 CPU 利用率也在 75-80% 之间。

示例输出top

top - 15:47:06 up 31 days,  1:38,  8 users,  load average: 11.46, …
Run Code Online (Sandbox Code Playgroud)

debian performance-tuning vmstat amazon-ec2 apache-2.2

13
推荐指数
1
解决办法
1万
查看次数

在检查函数的退出状态和抑制输出时使用 shell 内置时间

我正在尝试在 bash 脚本中执行以下操作,并且想知道是否有可能:

  • 使用 time
  • 抑制命令的 stdout 输出
  • 在出现错误时捕获命令的 stderr 输出
  • 运行后查看命令的退出状态码

这是一个复杂的链,我没有太多运气让它一起工作。如果我停止使用时间,我可以获得状态代码。

这是我到目前为止所拥有的:

# the setup
TIMEFORMAT=%R
MYSQL=mysql <options>

# execute and time a query (does more than is listed here)
function executeQuery {

  TIME=$( time ( $MYSQL "$1" 2>&1 | tee /tmp/somefile.txt > /dev/null ) 2>&1 )

  # do something with $?

}
Run Code Online (Sandbox Code Playgroud)

我正在使用 tee 将命令中的任何错误响应重定向到文件,然后将生成的 stdout 发送到 /dev/null。然后我将时间命令的 stderr 重定向到 stdout,它应该以 $TIME 结束。

现在,如果我将该行更改为:

  TIME=$( time ( $MYSQL "$1" 2>&1 | tee /tmp/somefile.txt > /dev/null; exit ${PIPESTATUS[0]} …
Run Code Online (Sandbox Code Playgroud)

bash time

4
推荐指数
1
解决办法
1904
查看次数