如何判断多管道命令中的“瓶颈”

如何判断多管道命令中的“瓶颈”

假设我有一个使用多个管道的命令。这可以是任何命令,但例如让我们使用这个简单的剪切和排序。例如

cat data.tsv | cut -f1,5,8,12 | sort | uniq -c | sed -e "s/cat/dog/g" | sort -k1nr > output.tsv

我如何“分析”这个?

无论如何,我可以说是 sed 或 uniq 减慢了我的执行时间吗?

在我的理想世界中,我希望看到这样的东西:

1- cat: 15 lines per second
2- cut: 13 lines per second
3- sort: 6 lines per second
4- uniq: 6 lines per second (Limited by input)
5- sed: 6 lines per second (Limited by input)
6- sort 6 lines per second (Limited by input)
7- write 6 lines per second (Limited by input)

有任何想法吗?

答案1

我建议使用pv来计算通过管道的行数。通过pv你可以一步步找到瓶颈。

cat data.tsv | pv -lr > /dev/null

cat data.tsv | cut -f1,5,8,12 | pv -lr > /dev/null

cat data.tsv | cut -f1,5,8,12 | sort | pv -lr > /dev/null

cat data.tsv | cut -f1,5,8,12 | sort | uniq -c | pv -lr > /dev/null

...

pv 输出示例:

timeout 10 yes | sed 's/yes/foo/' | rev | pv -lr >/dev/null
[ 120k/s] 

相关内容