8000 Hive might use too many file descriptors, causing application to run out of limit · Issue #936 · team113/messenger · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Hive might use too many file descriptors, causing application to run out of limit #936
Closed as not planned
@SleepySquash

Description

@SleepySquash

Summary

Каждый бокс Hive - это два файла на Dart VM платформах: $(box_name).hive и $(box_name).lock. Файлы после открытия держатся в режиме чтения/записи, т.е. висят как активные дескрипторы.

Теперь, если делать:

  • открывать много чатов (мы под каждый чат грузим 4 хайв бокса - сообщения, сортировка сообщений, участники, сортировка участников, итого 8 (ВОСЕМЬ) файловых дескрипторов)
  • искать много пользователей (локальные диалоги точно так же сразу же инициализируются и создают все эти же файлы)

ТО можно очень быстро выйти за пределы лимита открытых файловых дескрипторов системой: на macOS это может быть от 256 до 1024, на Linux вообще любое количество. На Windows проблема отсутствует, там этих хэндлов может быть очень много.

На что это влияет? Да приложение мёртвым становится: unix системы даже websocket коннекты через файловые дескрипторы делают, что приводит к тому, что невозможно получать подписки и подключаться к звонкам.

Steps to reproduce

  1. Открыть приложение на macOS/Linux.
  2. Создать много чатов, искать много пользователей.
  3. Можно параллельно мониторить количество дескрипторов.
  4. Рано или поздно приложение упрётся в hard limit дескрипторов и словит ошибку лимита открытых дескрипторов => станет невозможным открывать новые чаты, подключаться к звонкам, итд.

What is the current bug behavior?

Упираемся в лимит файловых дескрипторов.

What is the expected correct behavior?

Не упираемся в лимит.

Possible fixes

  1. Самый идеальный: вместо Hive'а использовать БД, которая открывать один файловый дескрипторв (isar, например). Migrate from Hive to isolate-friendly database #27
  2. Оттягивающий проблему: сделать общий бокс под сообщения и участников, оставить под каждый чат только боксы с сортировками сообщений и участников. Это приведёт к уменьшению зависимости от чатов с 8N до 2N.
  3. Оттягивающий проблему: Не открывать боксы с локальными чатами, когда мы просто ищем пользователей, а открывать их только тогда, когда мы реально открываем чат.
  4. Оттягивающий проблему: Закрывать боксы неиспользуемых чатов: вышли из контроллера => деаллоцируем чат, закрываем бокс.

Metadata

Metadata

Assignees

Labels

bugBugs and incorrectness problemsk::refactorRefactor changes of existing codemovedIssue/PR is moved to another projectwontfixThis will not be worked on

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0