【问题标题】:react-native start gives me "Watchman error: too many pending cache jobs"react-native start 给了我“守望者错误:太多待处理的缓存作业”
【发布时间】:2019-08-04 22:28:41
【问题描述】:

问题

当我创建一个捆绑包时 - 守望者抓取最初以“too many pending cache jobs”失败,这似乎减慢了捆绑过程:

$ react-native start --reset-cache

加载依赖关系图...jest-haste-map:守望者抓取失败。使用节点爬虫重试一次。

这通常发生在 watchman 没有运行时。在项目的根文件夹中创建一个空的.watchmanconfig 文件,或者在项目中初始化一个 git 或 hg 存储库。

错误:Watchman 错误:待处理的缓存作业过多。确保 watchman 正在为此项目运行。见https://facebook.github.io/watchman/docs/troubleshooting.html

此外,这些可能是相关的:

  • 我可以通过从手表配置中排除 node_modules 来消除错误
  • 没有错误,并且捆绑器会在 20 秒 内启动
  • 出现错误,craw 需要 4 秒,但捆绑器在 4 分钟后启动

背景

预捆绑脚本

我在打包程序之前运行这些,以尝试获得更高的稳定性:

watchman watch-del-all
watchman shutdown-server
sudo sysctl -w kern.maxfiles=5242880
sudo sysctl -w kern.maxfilesperproc=524288

守望者配置文件

我将我的.watchconfig 文件设置为额外允许:

{
  "ignore_dirs": [],
  "fsevents_latency": 0.5,
  "fsevents_try_resync": true
}

守望者日志

抓取完成,根据完整日志在几秒钟内完成

$ tail -f /usr/local/var/run/watchman/coolman-state/log
22:08:24,193: [client=0x7ff4a9686d98:stm=0x7ff4a9b2de00:pid=0] send_error_response: too many pending cache jobs
22:08:24,340: [listener] Watchman 4.9.0 <no build info set> starting up on coolman
22:08:24,341: [listener] path /Users/coolman/project/react-native-app is on filesystem type apfs
22:08:24,342: [listener] root /Users/coolman/project/react-native-app using watcher mechanism fsevents (auto was requested)
22:08:24,344: [listener] file limit is 2560 kern.maxfilesperproc=524288
22:08:24,344: [listener] raised file limit to 524288
22:08:24,345: [listener] launchd: "sock" wasn't present in Sockets
22:08:28,805: [io 0x7f87ba000818 /Users/coolman/project/react-native-app] PERF: {"ru_nvcsw": 1460, "ru_nsignals": 0, "ru_msgrcv": 0, "ru_msgsnd": 0, "ru_inblock": 0, "ru_majflt": 0, "ru_nswap": 0, "ru_minflt": 28103, "ru_ixrss": 0, "ru_maxrss": 115109888, "system_time": 2.9349970000000001, "user_time": 1.327971, "elapsed_time": 4.4614079999999996, "pid": 29414, "ru_idrss": 0, "meta": {"root": {"watcher": "fsevents", "ticks": 2, "number": 1, "case_sensitive": false, "recrawl_count": 0, "path": "/Users/coolman/project/react-native-app"}}, "version": "4.9.0", "ru_oublock": 0, "ru_nivcsw": 2171, "start_time": 1564952904.3444469, "description": "full-crawl"}
22:08:28,805: [io 0x7f87ba000818 /Users/coolman/project/react-native-app] crawl complete

【问题讨论】:

    标签: react-native watchman


    【解决方案1】:

    解决方案

    "content_hash_max_items": 500000 添加到我的.watchmanconfig 为我解决了这个问题。

    解释:

    听起来您需要针对工作负载调整元数据缓存大小;当 watchman 尝试插入比配置更多的缓存条目时会发生该错误。

    您可以在.watchmanconfig 文件中指定更大的值:

    • content_hash_max_itemscontent.sha1hex 元数据相关,默认为 131072。一个相关的选项是content_hash_max_warm_per_settle,默认为1024,这会导致在每次结算时评估多达这么多的项目。
    • symlink_target_max_items 默认为 32768。在查询请求符号链接目标的情况下,此缓存用于readlink。这不太可能是您的问题。

    我建议运行find /Users/coolman/project/react-native-app | wc -l 来获取项目中当前文件数量的上限,并使用它来调整这些缓存的大小;如果您的文件多于这些默认值,那么您应该相应地提高这些缓存设置。

    我不建议更改默认的fsevents_latency 参数;你能分享更多关于是什么导致你改变它的背景吗?

    Github

    【讨论】:

      猜你喜欢
      • 2017-01-05
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多