【问题标题】:How can I monitor memory consumption during webserver stress test?如何在网络服务器压力测试期间监控内存消耗?
【发布时间】:2014-03-17 00:36:54
【问题描述】:
我想对我在 localhost 上运行的 Apache 网络服务器进行压力测试。测试将请求网络服务器执行我编写的 PHP 应用程序。我想查看测试期间网络服务器(和/或相关的 PHP 进程)消耗了多少内存(RAM)。或者在测试完成后查看它消耗了多少。
我的操作系统是 Ubuntu 13.10。
我查看了 Apache Bench、Apache JMeter、Siege 和 httperf。他们似乎都没有提供这样的信息。最多,我可以在 httperf 中看到一些 CPU 负载(在大多数情况下是 100 %,所以不太相关)。
是否有一些工具可以为我提供内存消耗信息?它不一定是网络服务器基准测试工具,也可以是与基准测试工具并行运行的另一个 Linux 软件。我只是认为通过top 命令手动监控测试有点不准确/业余。提前谢谢你。
【问题讨论】:
标签:
php
linux
performance
apache
benchmarking
【解决方案1】:
我也设置了一些 PHP cronjobs,当我通过控制台手动启动脚本时,我也想查看调试和其他内容。
我输入了这样的方法:
protected $consoleUpdate;
protected function printMemoryUsage() {
if ((time() - $this->consoleUpdate) >= 3) {
$this->consoleUpdate = time();
echo "Memory: ",
round(memory_get_usage(true) / (1024 * 1024)),
" MB",
"\r";
}
}
尽可能频繁地调用此方法以打印脚本内存使用情况。
请注意控制台中的最后一个\r,它将光标返回到行首并覆盖该行。如果您没有任何其他输出,这会导致您的屏幕不会移动,而是会更新。
【解决方案2】:
我使用 vmstat 来监控内存、磁盘和 CPU。以下是在基于 Linux 的 Raspberry Pi 堆底部复制文件时的一些测量结果。我在 1980 年代第一次使用 vmstat,监视早期 Unix 系统上的数据库活动。更多细节在:
http://www.roylongbottom.org.uk/Raspberry%20Pi%20Stress%20Tests.htm
vmstat 可以从单独的终端运行,也可以在组合脚本文件中运行。
pi@raspberrypi /mnt $ time sudo sh -c "cp -r 256k /mnt/new2 && sync"
40 samles at 1 second intervals
vmstat 1 40 > vmstatRes.txt
real 0m38.781s
user 0m0.400s
sys 0m8.400s
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 304684 15208 65952 0 0 0 0 1109 319 39 2 59 0
1 0 0 282788 15208 87308 0 0 10292 0 4018 2994 5 57 9 29
1 1 0 256996 15208 112768 0 0 12380 0 4687 3863 3 53 0 44
2 2 0 231452 15212 138028 0 0 12288 40 4781 4024 5 55 0 40
0 1 0 216576 15216 152476 0 0 7004 10512 5649 3580 5 50 0 46
2 2 0 201688 15216 167288 0 0 7144 17488 5341 3527 2 52 0 46
1 0 0 195064 15216 173808 0 0 3192 9016 5909 3214 2 34 0 64
3 0 0 169520 15216 199152 0 0 12304 0 4704 3914 2 60 0 38
2 3 0 149988 15220 218288 0 0 9252 9892 5003 3614 2 52 0 45
0 2 0 131008 15224 237072 0 0 9112 10324 5086 3568 2 54 0 44
1 0 0 120160 15224 247784 0 0 5232 0 4976 2935 0 34 0 66
0 1 0 110424 15224 257404 0 0 4628 12864 5097 3034 4 36 0 60
1 0 0 86556 15224 281120 0 0 11536 0 4965 3874 3 54 0 43
1 1 0 73784 15224 293816 0 0 6188 11592 5545 3514 2 46 0 52
1 1 0 63252 15232 304132 0 0 4968 10320 4617 2748 2 34 0 64
0 1 0 43148 15232 323960 0 0 9652 7184 5126 3749 2 54 0 43
0 1 0 29336 15232 337560 0 0 6596 10036 4311 2796 2 38 0 59
1 1 0 23944 11696 346276 0 0 7480 0 5465 3455 2 46 0 52
2 1 0 23076 9580 349184 0 0 2860 10524 4521 2323 1 35 0 64
2 1 0 24440 5300 351508 0 0 8864 5188 4586 3215 1 66 0 33
0 1 0 24500 3900 352704 0 0 4896 11448 5974 3308 2 49 0 49
1 1 0 24432 3772 352700 0 0 10424 6208 4851 3682 2 60 0 38
1 1 0 23764 3772 353736 0 0 6568 5184 5970 3526 1 45 0 53
1 1 0 24068 3776 353500 0 0 4900 11388 5449 3142 0 40 0 60
0 1 0 24400 3780 352552 0 0 10068 8848 4821 3531 2 57 0 40
1 1 0 24152 3772 352588 0 0 8292 2784 5207 3588 2 50 0 48
1 1 0 23516 3772 353620 0 0 6800 7816 5475 3475 1 49 0 49
0 1 0 24260 3772 352940 0 0 7004 7424 5042 3284 4 43 0 52
2 1 0 24068 3776 353060 0 0 4624 10292 4798 2801 0 39 0 61
2 0 0 23820 3780 353340 0 0 8844 5508 5251 3609 0 56 0 44
2 1 0 24252 3772 352528 0 0 4552 12000 5053 2841 2 44 0 54
1 1 0 23696 3772 353120 0 0 10880 2176 4908 3694 2 58 0 40
1 0 0 24260 3772 352212 0 0 3748 11104 5208 2904 2 34 0 63
3 2 0 24136 3780 352084 0 0 10148 1628 4637 3568 1 55 0 44
0 1 0 24192 3780 352120 0 0 4016 10260 4719 2613 1 31 0 68
1 1 0 24392 3772 352076 0 0 6804 10972 5386 3473 1 52 0 47
1 1 0 24392 3772 351704 0 0 8568 8788 5101 3502 2 61 0 36
0 1 0 24376 3780 351764 0 0 0 30036 6711 1888 0 36 0 64
0 1 0 24252 3780 351928 0 0 28 2072 5629 1354 0 10 0 90
0 0 0 24768 3780 351968 0 0 40 20 1351 579 9 6 13 72
1 0 0 24768 3780 351968 0 0 0 0 1073 55 1 1 98 0
【解决方案3】:
诸如 top、htop、memstat、iotop、mysqltop 之类的东西。所有这些工具都非常适合在您围攻服务器(以及它的朋友 apachebench)时查看是什么彻底烧毁了您的服务器。
【解决方案4】:
htop 可能正是您想要的。
就我个人而言,我最近发现了一个名为 byobu 的东西——它在底部为您提供了方便的读数(您可以通过按 F9 进行配置)——
根据您的描述,这已成为我个人的最爱。
不过,您也可以查看 xdebug -- 并使用 xdebug_memory_usage() 之类的东西 -- 在您正在测试的 php 脚本中将信息转储到脚本关键点的日志文件中