Cache control via cli on Linux

Привет! Не могу разобраться с параметрами, управляющими настройками кэша в cli. Хочу явно задать максимальный размер кэша и директорию на диске, но не очень выходит - в любом случае папка с кэшем /.acestream_cache/ всегда превышает задаваемый лимит. Пробовал запускать start-engine с разными параметрами, описанными вот тут Command Line Options - Ace Stream DAO, но все тщетно. Также заметил, что ./start-engine --help выдает другой, расширенный набор параметров. Подскажите, как правильно управлять кэшом в cli? И можно ли вообще выключить кэширование на диск и использовать только память?

Для начала нужно понять, действительно ли заданный из CLI лимит применился - см. Ace Stream 3.1 for Ubuntu (ru/en) - #112 от пользователя Pljushevij
Плюс нужно учитывать, что если движок “видит”, что свободного места на диске больше, чем задано в кеше, то он может использовать его во время активной сессии - за это, по идее, отвечает параметр “disk_cache_auto”, но применительно к свежим версиям нужно уточнять.

Т.е алгоритм простой - запускаем движок с указанием лимита кеша из ком. строки или .conf файла, и затем проверяем - применился он или нет.
Проверяем так, например:

curl http://host:6878/webui/app/TOKEN/settings/get | jq . | grep cache

где “host” это имя хоста/адрес ПК с запущенным движком, а “TOKEN” - заранее заданный токен доступа (см, например https://forum.acestream.media/t/i-want-to-acces-to-control-pannel-again/)
Выхлоп должен быть похож на:

  "vod_cache_type": "disk",
  "disk_cache_limit": 10737418240,
  "live_cache_type": "memory",
  "disk_cache_auto": true,
  "memory_cache_limit": 831516876,
  "cache_dir": "/opt/acestream/cache",

Как минимум, цифры лимитов должны соответствовать тем, что заданы через CLI. Плюс можно поиграться с “disk_cache_auto” - установить его в 0 (curl http://host:6878/webui/app/TOKEN/settings/set?disk_cache_auto=0) и проверить, изменится ли поведение с нарушением лимитов кеша.

Можно, “–vod-cache-type memory”

1 лайк

Спасибо! Буду пробовать

using latest version:3.2.3 revision:be4471a

when i set the live/vod cache to disk and set the the limit the 1G, the cache keeps growing.

acestream-engine --live-cache-type disk --vod-cache-type disk --disk-cache-limit 1073741824 --state-dir /var/lib/ACEStream --log-file /var/lib/ACEStream/acestream-engine.log

 --live-disk-cache-size LIVE_DISK_CACHE_SIZE
                        Disk cache max size in bytes

the command line states that the unit is bytes, in case it is wrong and gb, i tried below still the issue is same.

acestream-engine --live-cache-type disk --vod-cache-type disk --disk-cache-limit 1 --state-dir /var/lib/ACEStream --log-file /var/lib/ACEStream/acestream-engine.log

when i set the cache to use memory then the memory is continously filled and get OOM.

how is that supposed to work?

See messages above - first you need to be sure that limits from CLI has actually applied - so setup access token and check actual values via HTTP API.

This is not normal, what running environment is for Ace Stream engine - OS/Python version, server is bare metal, VM, container?
Are you using Ace Stream engine as client or as server (for broadcasting)?

i digged deeper in the OOM issue it was due to another process consuming it yet i was confused.

acestream running as client, on a memory limited device (2gb) and with a mmcblock which is prune to wearing. so using memory is best option for my use case and i changed to use memory for caching.

when i give 50MB * 1024 * 1024 = 52428800bytes memory-cache-limit, i see it is not picking it up and using 833072128 bytes = 794MB.

Considering that i only have 2GB ram it is around %40 of total ram. This is too much, how can i restrict?

[tv@stb ACEStream]$ free
               total        used        free      shared  buff/cache   available
Mem:         1919520     1329508      404388      258688      635620      590012
Swap:        1048572      666108      382464
conf
[tv@stb ACEStream]$ cat /usr/lib/acestream-engine/acestream.conf
--stats-report-interval
1
--stats-report-peers
--slots-manager-use-cpu-limit
1
--log-file
acestream.log
--vod-cache-type
memory
--live-cache-type
memory
--memory-cache-limit
52428800
--access-token
tv

json
{
  "version": "3.2.3",
  "version_code": 3020300,
  "cache_dir": "/var/lib/ACEStream",
  "disk_cache_limit": 10737418240,
  "memory_cache_limit": 833072128,
  "live_cache_type": "memory",
  "vod_cache_type": "memory",
  "download_limit": 0,
  "upload_limit": 0,
  "vod_buffer": 3,
  "live_buffer": 10,
  "max_connections": 500,
  "max_peers": 50,
  "port": 8621,
  "profile_gender": null,
  "profile_age": null,
  "output_format_live": "auto",
  "output_format_vod": "auto",
  "transcode_audio": false,
  "transcode_mp3": false,
  "transcode_ac3": false,
  "preferred_audio_language": "eng",
  "disk_cache_auto": true,
  "max_upload_slots": 10,
  "auto_slots": true,
  "epg_system_sources_enabled": true,
  "auth_method": "none",
  "login": "",
  "has_password": false,
  "auth_level": 0,
  "allow_intranet_access": 1,
  "allow_remote_access": 0,
  "allow_external_players": 1,
  "allow_our_player": 1,
  "android_config": {
    "send_debug_reports": false,
    "use_acknowledged_purchase_cache": false,
    "notifications": [],
    "ad_config": {
      "show_bonus_ads_activity": false,
      "max_ads": 2,
      "ima_sdk_handler_delay": 250,
      "providers": [
        "admob"
      ],
      "appodeal_disable_networks": [
        "admob"
      ],
      "admob_rewarded_video_default_segment": 50,
      "admob_rewarded_video_auto_segment": 50,
      "admob_interstitial_background_load_interval": 10000,
      "admob_rewarded_video_segments": [],
      "load_timeout": {
        "admob_interstitial_preroll": 3000,
        "admob_interstitial_pause": 3000,
        "admob_interstitial_close": 3000,
        "appodeal_interstitial": 3000,
        "admob_rv": 3000,
        "appodeal_rv": 3000,
        "admob_banner": 5000,
        "appodeal_banner": 5000,
        "vast": 60000,
        "preroll_interstitial_with_vast": 1000
      },
      "min_impression_interval": {
        "preroll": 1000,
        "pause": 10000,
        "unpause": 1000,
        "close": 10000
      },
      "custom_ads_rv_providers": [
        "admob_rv"
      ],
      "priorities": {
        "preroll": [
          [
            "vast"
          ],
          [
            "custom"
          ],
          [
            "admob_interstitial_preroll"
          ]
        ],
        "pause": [
          [
            "admob_interstitial_pause"
          ]
        ],
        "unpause": [
          [
            "vast"
          ]
        ],
        "close": [
          [
            "admob_interstitial_close"
          ]
        ],
        "main_screen_non_registered": [
          []
        ],
        "main_screen_registered": [
          []
        ]
      }
    }
  }
}

os is archlinux with pkgbuild: AUR (en) - acestream-engine

Ok, now you may try to set memory limits via HTTP API:
curl "http://host:6878/webui/app/TOKEN/settings/set?memory_cache_limit=52428800"
and check again after engine restart - this value should be preserved.

ah ok, you mentioned to set the limits over the json interface. Now i set it, and it is accepted. But why command line argument is ignored?

This is old “feature bug”, which came from desktop version of Ace Stream - some setting, which stored in .pickle file (set via UI or HTTP API) have higher priority, than CLI or .conf file. This issue should be addressed in the upcoming versions.