文件夹监控的通讯方式到底让什么资源瓶颈了?

2023-07-17 17:47:19 +08:00
 chen0520

大概架构是这样,A 进程监控事件,然后产生图片到一个文件夹,B 进程监控文件夹,并记录生成的事件,其中涉及到转换 bmp 文件为 jpg (源图太大),实际操作过程中,经常会出现图片丢失的情况,或者说源图产生但是图片是空,然后并发高的时候整个进程都很卡,ctrl-C 要好久进程才能结束,卡的时候甚至 ssh 都登录不了,第一次碰到这情况,咋回事呢?

2007 次点击
所在节点    Go 编程语言
9 条回复
chen0520
2023-07-17 18:27:14 +08:00
卡的时候其实 ls 命令也要卡半天才会出结果
dode
2023-07-17 21:23:02 +08:00
把这个目录调整到内存目录下去吧,尽快清理不用的文件,注意临界文件没有完全写入完成的问题
dode
2023-07-17 21:23:52 +08:00
多个硬盘隔离 IO 读写请求
fuxkcsdn
2023-07-17 21:59:16 +08:00
所有图片都在一个文件夹内?有做二、三级目录吗?没有的话,当文件多的时候肯定会卡
flyqie
2023-07-18 00:41:29 +08:00
硬盘 io 导致的问题?
documentzhangx66
2023-07-18 08:01:30 +08:00
做开发要经常检查 CPU 使用率、io 负载、网络负载等。

你这种架构需要限制最大事务数量,超过的直接丢掉,或者改为多级架构。前级只做 path str 处理,后级再根据整机负载,慢慢处理图片。
bwangel
2023-07-18 11:57:27 +08:00
我之前用 go 的 fsnotify 实现监听文件功能的时候,也遇到过使用 CPU 太高的问题。后来的解决方案是加个定时器,隔 10S 再批量处理一下事件,CPU 使用率就降下去了

https://github.com/gohugoio/hugo/blob/387c5f60f97141d638327f84ee426fb44f6c554e/watcher/batcher.go#L60-L78

hugo 中有个 batcher ,也是类似的思路。批量汇集事件之后再处理。
bwangel
2023-07-18 11:59:19 +08:00
#7

改进之后,监听的目录没有 exclude node_modules, 监听了几万个文件,也没有太大的性能问题。

但我的逻辑很简单,监听到文件修改之后发个 http 请求,没有你的逻辑复杂。
chen0520
2023-07-20 11:18:20 +08:00
@flyqie io 的话,排查步骤一般是啥,用啥命令啊

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

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

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

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

© 2021 V2EX