V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
chen0520
V2EX  ›  Go 编程语言

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

  •  
  •   chen0520 · 286 天前 · 1807 次点击
    这是一个创建于 286 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2023-07-20 11:18:20 +08:00
    chen0520
        1
    chen0520  
    OP
       285 天前
    卡的时候其实 ls 命令也要卡半天才会出结果
    dode
        2
    dode  
       285 天前 via Android
    把这个目录调整到内存目录下去吧,尽快清理不用的文件,注意临界文件没有完全写入完成的问题
    dode
        3
    dode  
       285 天前 via Android
    多个硬盘隔离 IO 读写请求
    fuxkcsdn
        4
    fuxkcsdn  
       285 天前
    所有图片都在一个文件夹内?有做二、三级目录吗?没有的话,当文件多的时候肯定会卡
    flyqie
        5
    flyqie  
       285 天前 via Android
    硬盘 io 导致的问题?
    documentzhangx66
        6
    documentzhangx66  
       285 天前
    做开发要经常检查 CPU 使用率、io 负载、网络负载等。

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

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

    hugo 中有个 batcher ,也是类似的思路。批量汇集事件之后再处理。
    bwangel
        8
    bwangel  
       285 天前
    #7

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

    但我的逻辑很简单,监听到文件修改之后发个 http 请求,没有你的逻辑复杂。
    chen0520
        9
    chen0520  
    OP
       283 天前
    @flyqie io 的话,排查步骤一般是啥,用啥命令啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4095 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:15 · PVG 18:15 · LAX 03:15 · JFK 06:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.