Потенциальная утечка памяти #5

Closed
opened 2025-05-14 04:23:15 +03:00 by anthony · 1 comment
Owner

Выдержка из логов контейнера:

Running: /app/bin/iptvc check -i /app/playlists.ini -t /app/channels.json
2025/05/14 01:05:21 Connected to cache DB
2025/05/14 01:05:21 Loading playlists from ini-file: /app/playlists.ini
2025/05/14 01:05:21 Loaded 170 playlists
2025/05/14 01:05:23 Found 167 cached playlists
2025/05/14 01:05:23 3 playlists will be checked
2025/05/14 01:05:23 [001/003] Playlist [mult]
2025/05/14 01:05:23 Fetching... (https://raw.githubusercontent.com/user797/Playlists/refs/heads/main/Cartoons.m3u8)
2025/05/14 01:05:24 Parsing content...
2025/05/14 01:05:24 Parsed, checking channels (307)...
2025/05/14 01:05:24 Check parameters calculated count=307 timeout=5.00s routines=61
/entrypoint.sh: line 30:    85 Killed                  $binary $args
Waiting 300 seconds

Выдержка из dmesg:

[29718.230958] [  16111]    33 16111    53157    32756   401408        0             0 php-fpm
[29718.230960] [  16117]     0 16117   522537   205757  1884160        0             0 ld-musl-x86_64.
[29718.230962] [  16125]    33 16125    60941     2742   204800        0             0 apache2
[29718.230963] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/docker/2467a915600c92398a33a854932b4cb4dc81f647dc284e4e797a8ed2b21f400e,task=ld-musl-x86_64.,pid=16117,uid=0
[29718.231001] Out of memory: Killed process 16117 (ld-musl-x86_64.) total-vm:2090148kB, anon-rss:823028kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1840kB oom_score_adj:0

Приводит к тому, что некоторые плейлисты не перепроверяются подолгу. Закономерности не заметил, но заметил именно на этих листах:

Выдержка из логов контейнера: ``` Running: /app/bin/iptvc check -i /app/playlists.ini -t /app/channels.json 2025/05/14 01:05:21 Connected to cache DB 2025/05/14 01:05:21 Loading playlists from ini-file: /app/playlists.ini 2025/05/14 01:05:21 Loaded 170 playlists 2025/05/14 01:05:23 Found 167 cached playlists 2025/05/14 01:05:23 3 playlists will be checked 2025/05/14 01:05:23 [001/003] Playlist [mult] 2025/05/14 01:05:23 Fetching... (https://raw.githubusercontent.com/user797/Playlists/refs/heads/main/Cartoons.m3u8) 2025/05/14 01:05:24 Parsing content... 2025/05/14 01:05:24 Parsed, checking channels (307)... 2025/05/14 01:05:24 Check parameters calculated count=307 timeout=5.00s routines=61 /entrypoint.sh: line 30: 85 Killed $binary $args Waiting 300 seconds ``` Выдержка из `dmesg`: ``` [29718.230958] [ 16111] 33 16111 53157 32756 401408 0 0 php-fpm [29718.230960] [ 16117] 0 16117 522537 205757 1884160 0 0 ld-musl-x86_64. [29718.230962] [ 16125] 33 16125 60941 2742 204800 0 0 apache2 [29718.230963] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/docker/2467a915600c92398a33a854932b4cb4dc81f647dc284e4e797a8ed2b21f400e,task=ld-musl-x86_64.,pid=16117,uid=0 [29718.231001] Out of memory: Killed process 16117 (ld-musl-x86_64.) total-vm:2090148kB, anon-rss:823028kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1840kB oom_score_adj:0 ``` Приводит к тому, что некоторые плейлисты не перепроверяются подолгу. Закономерности не заметил, но заметил именно на этих листах: * https://raw.githubusercontent.com/user797/Playlists/refs/heads/main/Cartoons.m3u8 * https://gitlab.com/iptv135435/iptvshared/raw/main/IPTV_SHARED.m3u
Author
Owner

Единственное, что может повлиять:
https://git.axenov.dev/IPTV/iptvc/src/branch/master/app/checker/checker.go#L229

Проблема в том, что некоторые каналы описываются через m3u, а некоторые отдают сразу бинарный поток. Например, плейлист с фильмами. Наступает момент, когда напрямую в ОЗУ пытается скачаться весь фильм, который может весить сотни и тысячи Мб.

Надо ограничить размер загружаемых данных до, например, 512 Кб. Если это нормальный теле/радиоканал, в этот объём точно войдёт любой текст m3u, а бинарные данные просто не будут заваливать ОЗУ -- главное хоть что-то есть. Может быть, этого хватит даже на определение MIME.

Единственное, что может повлиять: https://git.axenov.dev/IPTV/iptvc/src/branch/master/app/checker/checker.go#L229 Проблема в том, что некоторые каналы описываются через m3u, а некоторые отдают сразу бинарный поток. Например, плейлист с фильмами. Наступает момент, когда напрямую в ОЗУ пытается скачаться весь фильм, который может весить сотни и тысячи Мб. Надо ограничить размер загружаемых данных до, например, 512 Кб. Если это нормальный теле/радиоканал, в этот объём точно войдёт любой текст m3u, а бинарные данные просто не будут заваливать ОЗУ -- главное хоть что-то есть. Может быть, этого хватит даже на определение MIME.
Sign in to join this conversation.
No description provided.