对不起,我没用cat
和echo
前期,但在上〜2GB的.gz文件运行less
我看到的RAM 25GB〜得到消耗(尽管输出被管道输送到awk和消费存在):“less”为gzip文件上的管道输出消耗大量内存,为什么?
[[email protected]:~]$ cat <(echo '173abcde7665559.90651926
131abcde7298936.49040546
... (25 lines total here) ...
186abcde4858463.43044639
163abcde9409643.80726489'|awk '{print "KEY 1"length($1)-16":"$1}';
less /tmp/stats.gz)|awk '{if("KEY"==$1){K[$2]=1}else{if($8 in K)print}}' >bad25&
我希望以上,而无需任何RAM来完成,但让我吃惊这里是怎么样子〜2.5小时后(由时间是89.8%,到阅读的.gz):
[[email protected]:~]$ ps auxf|grep -e 'pts/2' -e PID |grep -v grep
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 26896 0.0 0.0 68356 1580 pts/2 Ss+ 15:23 0:00 \_ /bin/bash
user 27927 0.7 0.0 58932 476 pts/2 S 15:23 1:00 \_ cat /dev/fd/63
user 27929 0.0 0.0 68356 716 pts/2 S+ 15:23 0:00 | \_ /bin/bash
user 27932 99.9 75.0 22389852 18512388 pts/2 R+ 15:23 137:42 | \_ less /tmp/stats.gz
user 27933 0.0 0.0 65928 1168 pts/2 S+ 15:23 0:00 | \_ /bin/sh - /usr/bin/lesspipe.sh /tmp/stats.gz
user 27934 1.3 0.0 4176 492 pts/2 S+ 15:23 1:52 | \_ gzip -dc -- /tmp/stats.gz
user 27928 2.1 0.0 63908 776 pts/2 S 15:23 2:56 \_ awk {if("KEY"==$1){K[$2]=1}else{if($8 in K)print}}
[[email protected]:~]$ free -m
total used free shared buffers cached
Mem: 24103 23985 117 0 125 3958
-/+ buffers/cache: 19901 4201
Swap: 8191 7914 277
[[email protected]:~]$ echo 1|awk "{print `cat /proc/27934/fdinfo/3|sed -n 's/pos:[ \t]*//p'`/`du -b /tmp/stats.gz|sed 's/[ \t].*//'`}";date
0.898284
Sat Apr 4 17:41:24 GMT 2015
我会尝试一些其他选项(如直接用重写我的命令或zcat
)以查看这些是否有帮助,但是如果有人能够知道为什么这种情况发生在少量(或任何其他命令)的情况下,无论是已知的less
或bash
错误在更高版本中修复?也许一些shell技巧强制更少的行为正确?
P.S. stats.gz是25261745373个字节的未压缩(5次左右MAX_INT包裹):
[[email protected]:~]$ ls -l /tmp/stats.gz
-rw-r--r-- 1 user users 1837966346 Apr 3 21:42 /tmp/stats.gz
[[email protected]:~]$ gzip -l /tmp/stats.gz
compressed uncompressed ratio uncompressed_name
1837966346 3786908893 51.5% /tmp/stats
'less'旨在交互使用。它的输出似乎在这里被传送到awk。为什么你甚至使用'less'? – Kenster 2015-04-04 18:53:58
只是一种“无害”的习惯(在今天的启示之后并非如此无害)。使用适当的低管设置 - 摘要从任何需要关心是否是gz/bz2/etc或一个原始文件(有大量的IT强制执行的例程gzipping/bzipping一切 - 背景上的旧比1d) – Vlad 2015-04-04 19:00:26