Ubuntu 下解压 gz 文件,如何限制速度?

45 天前
 zhongjun96

客户上传的是 gz 压缩包,解压后是单个 log 文件,压缩包大小1G左右,解压后10G左右。
使用 gunzip 或者 gzip -d 解压文件,会跑满服务器硬盘速度 200M/s ,导致服务器上其他服务卡顿。
有什么限制解压速度的方法吗?

2365 次点击
所在节点    Linux
27 条回复
realpg
45 天前
@zhongjun96 #19
额 仔细看了下 你这是 buffered io 肯定是很快的
这也是我跟 4 楼讨论的问题

你需要用 iostat 查硬盘真实写入速度 这也是我这个办法的最核心的东西
realpg
45 天前
@aloxaf #17

这里走 dd 还是建议用 odirect...
fsync 也会有奇怪问题 我记不住是啥问题了 得看知识库 懒
我们整天跟 io 打交道 为了把成本降低到正常使用云的 5%
vivisidea
45 天前
@zhongjun96 #15

另外可以试试 FIFO 管道?解压的时候不直接解压到目标文件,而是解压到 FIFO 管道,程序也是去读这个管道

示例
```
vivi@pc:~/tmp/fifo$ mkfifo gz-fifo
vivi@pc:~/tmp/fifo$ for i in {1..10000}; do echo $i >> file.txt; done
vivi@pc:~/tmp/fifo$ gzip file.txt
vivi@pc:~/tmp/fifo$ ls
file.txt.gz gz-fifo
vivi@pc:~/tmp/fifo$ gzip -d < file.txt.gz > gz-fifo

此时 gzip 这个命令会 hang 住,因为 fifo 的 buffer 满了,然后开启另一个终端,直接 cat 这个 gz-fifo 文件,模拟程序读取,是可以读到完整数据的,这个过程应该不会写磁盘

```

为啥这个 markdown code 不起作用阿艹😂
zhongjun96
45 天前
@aloxaf #4 你这个命令可以
julyclyde
44 天前
@phrack 考虑到 gzip 是流式编码,用不解压直接读取的方式其实和解压是一样的,而且也会遇到一样的无法限速的问题
phrack
44 天前
@julyclyde 这个无法限速但是只会读硬盘了,就不会因为写硬盘导致卡死了
phrack
44 天前
@phrack 而且程序里也可以限速啊,你读 1kb 就只会解压这 1kb 或者再多一点点

最后其实 op 上面说他们不能改程序这个办法不能用,但是还有个解决办法,其实有插件可以直接 mount zip 文件到文件系统上。

啥玩意儿都能直接 mount 的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040701

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX