對於我的應用程序(在Linux下)的負載測試,我正在尋找一種工具,以特定速率(如100字節/秒)在標準輸出上輸出數據,以便管道輸出到netcat,將其發送到我的應用程序。 dd的某些選項會很理想,但到目前爲止我沒有找到任何東西。打印什麼樣的數據並不重要(NUL字節正常)。任何提示?以特定速度執行stdout輸出
回答
我認爲這是你真正想要的:Pipe Viewer
使用<fast input> | pv -qL <rate>[k|m|g|t] | <rate-limited output>
將限制管道到要求的速率。
如果您一次只能獲取所有的一百個字節,您可以至少在第一次嘗試時在shell中執行一個與sleep
和普通舊版echo
的循環。
好主意 - 類似於「while [true];做echo -n」1234567890「;使用10000次;完成」已經有效。 – oliver 2008-10-28 10:16:57
那麼,我現在使用nuttcp來做「真正的」負載測試。它的開銷似乎很低,所以測試系統不會受到太多幹擾。
我寫了一個快速程序,它帶一個參數,每秒打印多少個A
字符到標準輸出(負參數表示沒有速率限制)。希望這可以幫助! :-)(在GNU libc上,您需要將程序鏈接到-lrt
。)
編輯:修改爲默認打印點,除非指定了第二個參數,在這種情況下,使用該參數的第一個字符。 (這意味着,如果你要打印的空字符,只需指定一個空字符串作爲第二個參數:-))。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
int
sleeptill(const struct timespec *when)
{
struct timespec now, diff;
clock_gettime(CLOCK_REALTIME, &now);
diff.tv_sec = when->tv_sec - now.tv_sec;
diff.tv_nsec = when->tv_nsec - now.tv_nsec;
while (diff.tv_nsec < 0) {
diff.tv_nsec += 1000000000;
--diff.tv_sec;
}
if (diff.tv_sec < 0)
return 0;
return nanosleep(&diff, 0);
}
int
main(int argc, char **argv)
{
double rate = 0.0;
char *endp;
struct timespec start;
double offset;
if (argc >= 2) {
rate = strtod(argv[1], &endp);
if (endp == argv[1] || *endp)
rate = 0.0;
else
rate = 1/rate;
if (!argv[2])
argv[2] = ".";
}
if (!rate) {
fprintf(stderr, "usage: %s rate [char]\n", argv[0]);
return 1;
}
clock_gettime(CLOCK_REALTIME, &start);
offset = start.tv_nsec/1000000000.0;
while (1) {
struct timespec till = start;
double frac;
double whole;
frac = modf(offset += rate, &whole);
till.tv_sec += whole;
till.tv_nsec = frac * 1000000000.0;
sleeptill(&till);
write(STDOUT_FILENO, argv[2], 1);
}
}
使用最新版本,您現在可以指定0作爲費率。從技術上講,它不會永遠等待(數學上應該如此);相反,它一直等到time_t(2038年1月,在具有32位time_t的平臺上)結束時。儘管如此,還是有一段時間需要等待。 :-D – 2008-10-28 10:58:00
- 1. 速度爲特定行號
- 2. 輸出速度
- 3. 斯威夫特操場執行速度
- 4. Java ScheduledExecutorService執行速度超出預期
- 5. 硒設定速度執行測試
- 6. 從ffmpeg獲取實時輸出以用於進度條(PyQt4,stdout)
- 7. 在執行命令時將輸出發送到perl中的STDOUT
- 8. 輸出不是STDOUT
- 9. 是否可以用cscript執行stdout?
- 10. Iphone以特定速度在特定方向上移動
- 11. 指針和執行速度
- 12. Mergesort執行速度很慢
- 13. 朱莉婭執行速度
- 14. HTMLUnit:執行速度超慢?
- 15. jsPlumb插入速度執行
- 16. 執行速度測試Android
- 17. dotfuscator減慢執行速度?
- 18. Matlab執行速度太慢
- 19. SqlClient.SqlDataAdapter.Update()執行速度很慢
- 20. 控制執行速度
- 21. php mysql shuffle輸出速度
- 22. 泛速度計算,以迅速執行不同的任務
- 23. 重定向stdout和stderr的輸出?
- 24. stdout重定向改變輸出
- 25. 在cpp中重定向stdout輸出
- 26. SSL速度 - 特定於Magento
- 27. 突出顯示特定的輸出行
- 28. 爲什麼Property執行速度比Field或Method執行速度慢?
- 29. 爲Windows批量輸出設置定義的stdout輸出區域?
- 30. 如何以特定寬度格式化輸出?
一位記者向我表示,使用管道連接netcat可能意味着管道可能是一個限制因素。因此,以您所尋求的速度直接寫入套接字更爲可靠。 – 2008-10-28 11:26:11