Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    [/file find name=$fileName] Использует 100% ресурсов процессора

    [/file find name=$fileName] Использует 100% ресурсов процессора

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    [/file find name=$fileName] Использует 100% ресурсов процессора, RouterOS
     
    Phenek
    Guest
    #1
    0
    10.10.2023 10:20:00
    Привет! Суть такая: я пытаюсь обрабатывать BLE-рекламы в офлайн-режиме. Нужно сохранять JSON-файл размером 4096 байт каждые 1-2 секунды. Потом я отправляю все файлы и удаляю их, когда MQTT-брокер снова подключается. Проблема в команде [/file find name=$fileName]. При большом количестве файлов она жрёт 100% CPU.

    Вот функция, которая создаёт имя файла с счётчиком в конце, чтобы всегда получать уникальное имя:
    :global getFileName do={
       :local counter 0
       :local fileName ("test/toto" . $counter . ".json")
       :while ([/file find name=$fileName] != "") do={
           :set counter ($counter + 1)
           :set fileName ("test/toto" . $counter . ".json")
       }
       :return $fileName
    }

    Отчёт:
    - Меньше 50 файлов — загрузка CPU от 60% до 100%, ответ быстрый.
    - Около 100 файлов — 100% CPU, но команда возвращается за ~200 мс.
    - Более 1000 файлов — 100% CPU, команда начинает отрабатывать только через 3 секунды (а у меня файл надо сохранять каждые 1-2 секунды XD).

    P.S. Реальное имя файла формируется по дате и времени, но если размер файла превышает 4096 байт, я создаю 2 файла с одинаковым именем, и тогда функция getFileName срабатывает вдвое дольше…

    Пример:  
    2023-10-09-13:02:41-8580.json  
    2023-10-09-13:02:41-8581.json
     
     
     
    Phenek
    Guest
    #2
    0
    27.10.2023 09:17:00
    Спасибо, @Amm0. К сожалению, команда ниже прерывается и не обрабатывает блок on-error:  
    :do { /file add name=$fileName contents=$content } on-error={:put "skip"}  
    [*] test/toto0.json размер файла: 3920 байт прервано файл уже существует

    @optio да, мы пробовали это решение, и оно лучше, но через какое-то время команда /file add name=$fileName contents=$content начинает работать медленнее. В итоге процесс начинает загружать процессор на 100%.  

    @rextended 2023-10-09-13:02:41-8580.json — это имя файла в формате ISO 8601, можно увидеть миллисекунды в конце имени. Я беру это из эпохи последнего BLE-объявления, завершающего файл, приблизительно 4096 байт. Но иногда получаю ошибку «файл уже существует… процесс прерван». Создание подпапок по годам/месяцам/дням/часам/минутам не помогло. При слишком большом количестве файлов RouterOS просто зависает.  

    Наша команда проанализировала ограничения RouterOS. MQTT-сообщения ограничены 4096 байтами, а файлы имеют ограничение по количеству и переменному размеру (в среде Mikrotik). Проверка существования файла, чтение и запись больших файлов должны быть стандартными задачами для любого скриптового языка.  

    Я знаю, вы скажете, что это возможно. Но мы тут не для того, чтобы "изобретать велосипед" (и тестировать его на каждом шагу). Если это возможно, значит, должно работать «из коробки».  

    Загрузка процессора на 100% для нас опасна, потому что мы теряем часть BLE-объявлений в эфире.  

    Спасибо за ваше время. В этом году мы не будем дальше использовать RouterOS. Ежегодно нам приходится менять около тысячи роутеров для обслуживания, так что, возможно, мы еще вернемся к Mikrotik и его ограничениям (я обязательно проверю).  

    Всего доброго и еще раз спасибо!
     
     
     
    optio
    Guest
    #3
    0
    27.10.2023 12:19:00
    Тогда можно попробовать разделить запись файлов по отдельным директориям с индексами директорий 0, 1, 2, 3… Ограничить количество файлов в каждой директории, при достижении лимита создавать новую и писать в неё. Также нужно отслеживать последний индекс и количество файлов в нём, чтобы не считать количество файлов в последней директории при каждой новой записи.
     
     
     
    rextended
    Guest
    #4
    0
    28.10.2023 10:05:00
    Неверно. 2023-10-09** - 13:02:41 - 8580 = 2023-10-09 13:02:41 с отрицательным часовым поясом “-85:80” (3 дня, 14 часов и 20 минут). Правильный формат для миллисекунд — "2023-10-09 T 13:02:41 . 8580 00 **** Z **". Если читать строку напрямую, это неправильное представление правильного формата… (T можно заменить на пробел, но не на “-”, а Z [или часовой пояс] можно опустить).
     
     
     
    rextended
    Guest
    #5
    0
    28.10.2023 10:23:00
    Похоже, текст для перевода не был предоставлен. Пожалуйста, пришлите его, и я с радостью выполню перевод.
     
     
     
    optio
    Guest
    #6
    0
    28.10.2023 10:30:00
    Пропустил это, это создаст кучу папок, но да, так действительно проще сделать, чем отслеживать индекс сегмента папки.
     
     
     
    Amm0
    Guest
    #7
    0
    31.10.2023 02:09:00
    В 7.12rc4 упоминалась правка бага, которая была достаточно расплывчатой, но, возможно, связана с «медленным» поиском — хотя это всего лишь предположение: system — исправлена многопоточность процессов (введена в версии 7.9); http://forum.mikrotik.com/t/v7-12rc-is-released/170147/1
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры