[GH-ISSUE #214] Ungraceful crash when running out of memory #142

Closed
opened 2026-10-15 12:57:06 +00:00 by bsakaguchi · 7 comments
Owner

Originally created by @Lombra on GitHub (Jun 19, 2025).
Original GitHub issue: https://github.com/games-on-whales/wolf/issues/214

Hi,

I run Wolf inside an LXC container. When an application crashes due to what I've been able to discern is memory shortage, the whole LXC container becomes nearly unresponsive, CPU usage bottoming out. The Wolf Docker container continues to run, though you can't connect to it or anything, and if I'm lucky, I can get a command through to (slowly) stop it, which resolves the situation.

I don't know where in the stack this would or could be alleviated, if at all. Docker log is not really showing anything at the time of the crash.

services:
  wolf:
    image: ghcr.io/games-on-whales/wolf:dev-zero-copy
    environment:
      HOST_APPS_STATE_FOLDER: /etc/wolf
      WOLF_LOG_LEVEL: debug
    volumes:
      - /etc/wolf:/etc/wolf
      - /tmp/sockets:/tmp/sockets:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
      - /dev:/dev/:rw
      - /mnt/udev:/run/udev:rw
    device_cgroup_rules:
      - 'c 13:* rmw'
    devices:
      - /dev/dri
      - /dev/uinput
      - /dev/uhid
    network_mode: host
    restart: unless-stopped
Starting default_wolf_1 ... done
Attaching to default_wolf_1
wolf_1  | [2025-06-13 19:18:53]
wolf_1  | [2025-06-13 19:18:53] [ /etc/cont-init.d/10-setup_user.sh: executing... ]
wolf_1  | [2025-06-13 19:18:53] **** Configure default user ****
wolf_1  | [2025-06-13 19:18:53] Container running as root. Nothing to do.
wolf_1  | [2025-06-13 19:18:53] DONE
wolf_1  | [2025-06-13 19:18:53]
wolf_1  | [2025-06-13 19:18:53] [ /etc/cont-init.d/15-setup_devices.sh: executing... ]
wolf_1  | [2025-06-13 19:18:53] **** Configure devices ****
wolf_1  | [2025-06-13 19:18:53] Exec device groups
wolf_1  | [2025-06-13 19:18:54] Adding user 'root' to groups: messagebus,root
wolf_1  | [2025-06-13 19:18:54] DONE
wolf_1  | [2025-06-13 19:18:54]
wolf_1  | [2025-06-13 19:18:54] [ /etc/cont-init.d/30-nvidia.sh: executing... ]
wolf_1  | [2025-06-13 19:18:54]
wolf_1  | [2025-06-13 19:18:54] [ /etc/cont-init.d/init-gamescope.sh: executing... ]
wolf_1  | [2025-06-13 19:18:54] Launching the container's startup script as user 'root'
wolf_1  | 18:18:54.031336196 INFO  | Gstreamer version: 1.26.2-0
wolf_1  | 18:18:54.031919404 DEBUG | XDG_RUNTIME_DIR=/tmp/sockets
wolf_1  | 18:18:54.031938386 INFO  | Reading config file from: /etc/wolf/cfg/config.toml
wolf_1  | 18:18:54.075037985 DEBUG | /dev/dri/renderD128 vendor: Intel Corporation
wolf_1  | 18:18:54.075079643 DEBUG | Skipping NVIDIA encoder, not a NVIDIA GPU (2)
wolf_1  | libva info: VA-API version 1.22.0
wolf_1  | libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
wolf_1  | libva info: Found init function __vaDriverInit_1_22
wolf_1  | libva info: va_openDriver() returns 0
wolf_1  | 18:18:54.097918093 INFO  | Using H264 encoder: qsv
wolf_1  | 18:18:54.097952323 DEBUG | Skipping NVIDIA encoder, not a NVIDIA GPU (2)
wolf_1  | 18:18:54.098012194 INFO  | Using HEVC encoder: qsv
wolf_1  | 18:18:54.098027510 DEBUG | Skipping NVIDIA encoder, not a NVIDIA GPU (2)
wolf_1  | 18:18:54.098069824 INFO  | Using AV1 encoder: qsv
wolf_1  | 18:18:54.098134515 DEBUG | Required DMA formats for vapostproc: ["NV12:0x0100000000000009", "YU12", "YV12", "YUYV:0x0100000000000009", "YU16:0x0100000000000009", "AB24:0x0100000000000002", "AR24:0x0100000000000009", "XB24:0x0100000000000002", "P010:0x0100000000000009", "AR30:0x0100000000000009", "AYUV:0x0100000000000009", "Y210:0x0100000000000009", "Y410:0x0100000000000009", "P012:0x0100000000000009", "Y212:0x0100000000000009", "Y412:0x0100000000000009"]
wolf_1  | 18:18:54.098306237 DEBUG | Loading server certificates from disk: /etc/wolf/cfg/cert.pem /etc/wolf/cfg/key.pem
wolf_1  | 18:18:54.098939401 INFO  | [RTP] Starting RTP ping server on ports 48100 and 48200
wolf_1  | 18:18:54.099019162 INFO  | RTSP server started on port: 48010
wolf_1  | 18:18:54.099041412 INFO  | Starting API server on /tmp/wolf.sock
wolf_1  | 18:18:54.099048903 INFO  | Starting mDNS service
wolf_1  | 18:18:54.099079055 INFO  | Control server started on port: 47999
wolf_1  | 18:18:54.099088737 INFO  | HTTP server listening on port: 47989
wolf_1  | XDG_RUNTIME_DIR (/tmp/sockets) is not owned by us (uid 0), but by uid 1000! (This could e.g. happen if you try to connect to a non-root PulseAudio as a root user, over the native protocol. Don't do that.)
wolf_1  | 18:18:54.099250506 DEBUG | [PULSE] Connecting...
wolf_1  | 18:18:54.099279422 DEBUG | [PULSE] Context failed
wolf_1  | 18:18:54.099286203 WARN  | [PULSE] Unable to connect, Access denied
wolf_1  | 18:18:54.099319325 INFO  | Starting PulseAudio docker container
wolf_1  | 18:18:54.100567502 INFO  | HTTPS server listening on port: 47984
wolf_1  | 18:18:54.101273603 WARN  | [DOCKER] Container WolfPulseAudio already present, removing first
wolf_1  | 18:18:54.308349638 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo
wolf_1  | 18:18:54.324174068 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo
wolf_1  | 18:18:54.338864231 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/applist
wolf_1  | 18:18:56.364995594 DEBUG | [PULSE] Connecting...
wolf_1  | 18:18:56.365913510 DEBUG | [PULSE] Pulse connection ready
wolf_1  | 18:18:57.363476969 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo
wolf_1  | 18:18:57.378291092 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo
wolf_1  | 18:18:59.892806202 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.893436604 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.893810421 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.894192287 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.913195589 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.913305072 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.913666118 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.914516858 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.934258039 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.934476980 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.934581605 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.936213855 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.953264711 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.953753317 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.953857410 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:18:59.955046013 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset
wolf_1  | 18:19:00.405975250 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo
wolf_1  | 18:19:00.421090897 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo
wolf_1  | 18:19:03.446435208 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo
wolf_1  | 18:19:03.462049963 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo
wolf_1  | 18:19:04.346569251 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/launch
wolf_1  | 18:19:04.346672000 DEBUG | Host app state folder: /etc/wolf/13740123630835630804/Steam, creating paths
wolf_1  | 18:19:04.354440634 DEBUG | [STREAM_SESSION] Create wayland compositor
wolf_1  | 18:19:04.354503284 DEBUG | [STREAM_SESSION] Create virtual audio sink
wolf_1  | 18:19:04.354637639 DEBUG | [GSTREAMER] Starting video producer: waylanddisplaysrc name=wolf_wayland_source render_node=/dev/dri/renderD128 ! video/x-raw(memory:DMABuf), drm-format={NV12:0x0100000000000009,YU12,YV12,YUYV:0x0100000000000009,YU16:0x0100000000000009,AB24:0x0100000000000002,AR24:0x0100000000000009,XB24:0x0100000000000002,AYUV:0x0100000000000009,Y210:0x0100000000000009,Y410:0x0100000000000009,P012:0x0100000000000009,Y212:0x0100000000000009,Y412:0x0100000000000009}, width=1920, height=1080, framerate=120/1 !
wolf_1  | interpipesink sync=true async=false name=13740123630835630804_video max-buffers=1
wolf_1  | 18:19:04.354689089 DEBUG | [GSTREAMER] Starting audio producer: pulsesrc device="virtual_sink_13740123630835630804.monitor" server="/tmp/sockets/pulse-socket" ! audio/x-raw, channels=2, rate=48000 ! queue leaky=downstream max-size-buffers=3 ! interpipesink name="13740123630835630804_audio" sync=true async=false max-buffers=3
wolf_1  | 18:19:04.355092635 DEBUG | [PULSE] Created virtual sink: 3
wolf_1  | 18:19:04.370875322 DEBUG | Setting up waylanddisplaysrc
wolf_1  |
wolf_1  | (wolf:1): GStreamer-CRITICAL **: 19:19:04.370: Bus bus1 already has a GSource watch
wolf_1  | 18:19:04.376654433 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.376673403 DEBUG | [RTSP] received command OPTIONS
wolf_1  | 18:19:04.392785852 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.392797753 DEBUG | [RTSP] received command DESCRIBE
wolf_1  | 18:19:04.408178453 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.408188648 DEBUG | [RTSP] received command SETUP
wolf_1  | 18:19:04.413309142 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.413322247 DEBUG | [RTSP] received command SETUP
wolf_1  | 18:19:04.428844969 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.428856663 DEBUG | [RTSP] received command SETUP
wolf_1  | 18:19:04.444836965 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.444847426 DEBUG | [RTSP] received command ANNOUNCE
wolf_1  | 18:19:04.444912363 DEBUG | [RTSP] Moonlight requested video format HEVC
wolf_1  | 18:19:04.444917126 DEBUG | [RTSP] Adjusted video bitrate to 39308 Kbps
wolf_1  | 18:19:04.461005129 DEBUG | [RTSP] found session by matching payload: 86.201.60.69
wolf_1  | 18:19:04.461023378 DEBUG | [RTSP] received command PLAY
wolf_1  | 18:19:04.464191092 DEBUG | [ENET] connected client: 192.168.0.202:13808
wolf_1  | 18:19:04.464826451 DEBUG | Starting video pipeline:
wolf_1  | interpipesrc listen-to=13740123630835630804_video is-live=true stream-sync=restart-ts max-buffers=1 block=false !
wolf_1  | vapostproc ! video/x-raw(memory:VAMemory), format=NV12, chroma-site=mpeg2, colorimetry=bt601 !
wolf_1  | qsvh265enc b-frames=0 gop-size=0 idr-interval=1 ref-frames=1 bitrate=39308 rate-control=cbr low-latency=1 target-usage=6 !
wolf_1  | h265parse !
wolf_1  | video/x-h265, profile=main, stream-format=byte-stream !
wolf_1  | rtpmoonlightpay_video name=moonlight_pay payload_size=1392 fec_percentage=20 min_required_fec_packets=2 !
wolf_1  | appsink sync=false name=wolf_udp_sink
wolf_1  |
wolf_1  | 18:19:04.473793977 WARN  | Received MOUSE_MOVE_REL_PACKET but no mouse device is present
wolf_1  | 18:19:04.484385395 WARN  | Received MOUSE_MOVE_REL_PACKET but no mouse device is present
wolf_1  | 18:19:04.494078175 DEBUG | Setting up wolf_udp_sink
wolf_1  | 0:00:10.479104951     1 0x7c060801cfa0 WARN                basesink gstbasesink.c:1248:gst_base_sink_query_latency:<13740123630835630804_video> warning: Pipeline construction is invalid, please add queues.
wolf_1  | 0:00:10.479124927     1 0x7c060801cfa0 WARN                basesink gstbasesink.c:1248:gst_base_sink_query_latency:<13740123630835630804_video> warning: Not enough buffering available for  the processing deadline of 0:00:00.020000000, add enough queues to buffer  0:00:00.020000000 additional data. Shortening processing latency to 0:00:00.000000000.
wolf_1  | 18:19:04.505080174 DEBUG | Wayland source message: WAYLAND_DISPLAY = wayland-1
wolf_1  | 18:19:04.505100873 INFO  | Wayland display ready, listening on: wayland-1
wolf_1  | 18:19:04.506214386 DEBUG | /proc/driver/nvidia/gpus/0000:00:02.0/information doesn't exists, this might be normal if the GPU is not Nvidia
wolf_1  | 0:00:10.485413267     1 0x7c0604000ff0 WARN              qsvencoder gstqsvencoder.cpp:1115:gst_qsv_encoder_init_encode_session:<qsvh265enc1> MFXVideoENCODE::Query returned warning 5 (MFX_WRN_INCOMPATIBLE_VIDEO_PARAM)
wolf_1  | 18:19:04.511509112 DEBUG | /dev/dri/renderD128 vendor: Intel Corporation
wolf_1  | 18:19:04.511555154 DEBUG | [DOCKER] Using fake-udev, creating /etc/wolf/13740123630835630804/Steam/udev/data
wolf_1  | WARNING: Kernel has no file descriptor comparison support: Operation not permitted
wolf_1  | 18:19:04.515872955 DEBUG | /dev/dri/renderD128 vendor: Intel Corporation
wolf_1  | 18:19:04.515959733 DEBUG | [DOCKER] Setting DeviceCgroupRules for hidraw:239 and input:13
wolf_1  | 18:19:04.516003908 DEBUG | [DOCKER] Container options: {"HostConfig":{"IpcMode":"host","CapAdd":["SYS_ADMIN","SYS_NICE","SYS_PTRACE","NET_RAW","MKNOD","NET_ADMIN"],"SecurityOpt":["seccomp=unconfined","apparmor=unconfined"],"Ulimits":[{"Name":"nofile","Hard":10240,"Soft":10240}],"Privileged":false,"DeviceCgroupRules":["c 239:* rwm","c 13:* rwm"]}}
wolf_1  | 18:19:04.517558019 WARN  | [DOCKER] Container WolfSteam_13740123630835630804 already present, removing first
wolf_1  | 0:00:10.507215242     1 0x7c0604000ff0 WARN                 basesrc gstbasesrc.c:4255:gst_base_src_push_segment:<interpipesrc0> segment format mismatched, ignore
wolf_1  | 18:19:04.579366906 INFO  | Creating Xbox joypad for controller 0
wolf_1  | 18:19:04.579580947 DEBUG | [INPUT] Sending PlugDeviceEvent for joypad 0 of type: 3
wolf_1  | 18:19:04.579687633 DEBUG | 13740123630835630804 received hot-plug device event
wolf_1  | 18:19:04.633016095 INFO  | Creating Xbox joypad for controller 1
wolf_1  | 18:19:04.633324619 DEBUG | [INPUT] Sending PlugDeviceEvent for joypad 1 of type: 3
wolf_1  | 18:19:04.633437920 DEBUG | 13740123630835630804 received hot-plug device event
wolf_1  | 18:19:04.679827000 INFO  | [DOCKER] Starting container: /WolfSteam_13740123630835630804
wolf_1  | 18:19:04.679874493 DEBUG | [DOCKER] Starting container: {
wolf_1  |  id: a46a26aafe22a5a8dac7778fbd22b96aa95c8a0ac94533d575057245cabd0e1e
wolf_1  |  name: /WolfSteam_13740123630835630804
wolf_1  |  image: ghcr.io/games-on-whales/steam:edge
wolf_1  |  status: 0
wolf_1  |  ports: []
wolf_1  |  mounts: [/tmp/sockets/pulse-socket:/tmp/sockets/pulse-socket:rw, /tmp/sockets/wayland-1:/tmp/sockets/wayland-1:rw, /etc/wolf/13740123630835630804/Steam:/home/retro:rw, /etc/wolf/13740123630835630804/Steam/udev:/run/udev/:rw, /etc/wolf/fake-udev:/usr/bin/fake-udev:ro]
wolf_1  |  devices: [/dev/dri/card0:/dev/dri/card0:mrw, /dev/dri/renderD128:/dev/dri/renderD128:mrw]
wolf_1  |  env: ["PROTON_LOG=1", "RUN_SWAY=true", "GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*", "PULSE_SOURCE=virtual_sink_13740123630835630804.monitor", "GAMESCOPE_REFRESH=120", "INTEL_DEBUG=norbc", "PUID=1000", "PULSE_SINK=virtual_sink_13740123630835630804", "WAYLAND_DISPLAY=wayland-1", "GAMESCOPE_HEIGHT=1080", "PGID=1000", "PULSE_SERVER=/tmp/sockets/pulse-socket", "XDG_RUNTIME_DIR=/tmp/sockets", "GAMESCOPE_WIDTH=1920", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "UMASK=000", "UNAME=retro", "HOME=/home/retro", "TZ=Europe/London", "DEBIAN_FRONTEND=noninteractive", "NEEDRESTART_SUSPEND=1", "GAMESCOPE_VERSION=3.15.14", "BUILD_ARCHITECTURE=amd64", "DEB_BUILD_OPTIONS=noddebs"]
wolf_1  | }
wolf_1  | 18:19:04.679912097 DEBUG | [DOCKER] Writing hwdb file: /etc/wolf/13740123630835630804/Steam/udev/data/c13:71
wolf_1  | 18:19:04.680191812 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/event7 c 13 71 && chmod 777 /dev/input/event7 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9ldmVudDcAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTczL2V2ZW50NwBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTcxAFNFUU5VTT03AFNVQlNZU1RFTT1pbnB1dABUQUdTPTpzZWF0OnVhY2Nlc3M6AFVTRUNfSU5JVElBTElaRUQ9MTc0OTgzODc0NAA=
wolf_1  | 18:19:04.685852250 INFO  | Creating Xbox joypad for controller 2
wolf_1  | 18:19:04.686091365 DEBUG | [INPUT] Sending PlugDeviceEvent for joypad 2 of type: 3
wolf_1  | 18:19:04.686186960 DEBUG | 13740123630835630804 received hot-plug device event
wolf_1  | 18:19:04.719791694 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/js0 c 13 0 && chmod 777 /dev/input/js0 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9qczAAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTczL2pzMABJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTAAU0VRTlVNPTcAU1VCU1lTVEVNPWlucHV0AFRBR1M9OnNlYXQ6dWFjY2VzczoAVVNFQ19JTklUSUFMSVpFRD0xNzQ5ODM4NzQ0AA==
wolf_1  | 18:19:04.743448556 DEBUG | [DOCKER] Writing hwdb file: /etc/wolf/13740123630835630804/Steam/udev/data/c13:72
wolf_1  | 18:19:04.743641661 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/event8 c 13 72 && chmod 777 /dev/input/event8 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9ldmVudDgAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc0L2V2ZW50OABJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTcyAFNFUU5VTT03AFNVQlNZU1RFTT1pbnB1dABUQUdTPTpzZWF0OnVhY2Nlc3M6AFVTRUNfSU5JVElBTElaRUQ9MTc0OTgzODc0NAA=
wolf_1  | 18:19:04.772160350 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/js1 c 13 1 && chmod 777 /dev/input/js1 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9qczEAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc0L2pzMQBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTEAU0VRTlVNPTcAU1VCU1lTVEVNPWlucHV0AFRBR1M9OnNlYXQ6dWFjY2VzczoAVVNFQ19JTklUSUFMSVpFRD0xNzQ5ODM4NzQ0AA==
wolf_1  | 18:19:04.799570144 DEBUG | [DOCKER] Writing hwdb file: /etc/wolf/13740123630835630804/Steam/udev/data/c13:73
wolf_1  | 18:19:04.799802067 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/event9 c 13 73 && chmod 777 /dev/input/event9 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9ldmVudDkAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc1L2V2ZW50OQBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTczAFNFUU5VTT03AFNVQlNZU1RFTT1pbnB1dABUQUdTPTpzZWF0OnVhY2Nlc3M6AFVTRUNfSU5JVElBTElaRUQ9MTc0OTgzODc0NAA=
wolf_1  | 18:19:04.831628214 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/js2 c 13 2 && chmod 777 /dev/input/js2 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9qczIAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc1L2pzMgBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTIAU0VRTlVNPTcAU1VCU1lTVEVNPWlucHV0AFRBR1M9OnNlYXQ6dWFjY2VzczoAVVNFQ19JTklUSUFMSVpFRD0xNzQ5ODM4NzQ0AA==
wolf_1  | 18:19:04.836647223 DEBUG | [GSTREAMER] Forcing IDR
wolf_1  | 18:19:04.913357989 DEBUG | Starting audio pipeline:
wolf_1  | interpipesrc listen-to=13740123630835630804_audio is-live=true stream-sync=restart-ts max-bytes=0 max-buffers=3 block=false !
wolf_1  | queue max-size-buffers=3 leaky=downstream ! audiorate ! audioconvert !
wolf_1  | opusenc bitrate=96000 bitrate-type=cbr frame-size=5 bandwidth=fullband audio-type=restricted-lowdelay max-payload-size=1400 !
wolf_1  | rtpmoonlightpay_audio name=moonlight_pay packet_duration=5 encrypt=true aes_key="ae6046f0d796b8e86597968d005aefae" aes_iv="1536159154" !
wolf_1  | appsink name=wolf_udp_sink
wolf_1  | 18:19:04.916128810 DEBUG | Setting up wolf_udp_sink
wolf_1  | 0:00:12.330287507     1 0x7c06040017d0 WARN                 basesrc gstbasesrc.c:4255:gst_base_src_push_segment:<interpipesrc1> segment format mismatched, ignore
Originally created by @Lombra on GitHub (Jun 19, 2025). Original GitHub issue: https://github.com/games-on-whales/wolf/issues/214 Hi, I run Wolf inside an LXC container. When an application crashes due to what I've been able to discern is memory shortage, the whole LXC container becomes nearly unresponsive, CPU usage bottoming out. The Wolf Docker container continues to run, though you can't connect to it or anything, and if I'm lucky, I can get a command through to (slowly) stop it, which resolves the situation. I don't know where in the stack this would or could be alleviated, if at all. Docker log is not really showing anything at the time of the crash. ```yaml services: wolf: image: ghcr.io/games-on-whales/wolf:dev-zero-copy environment: HOST_APPS_STATE_FOLDER: /etc/wolf WOLF_LOG_LEVEL: debug volumes: - /etc/wolf:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev:/dev/:rw - /mnt/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped ``` ``` Starting default_wolf_1 ... done Attaching to default_wolf_1 wolf_1 | [2025-06-13 19:18:53] wolf_1 | [2025-06-13 19:18:53] [ /etc/cont-init.d/10-setup_user.sh: executing... ] wolf_1 | [2025-06-13 19:18:53] **** Configure default user **** wolf_1 | [2025-06-13 19:18:53] Container running as root. Nothing to do. wolf_1 | [2025-06-13 19:18:53] DONE wolf_1 | [2025-06-13 19:18:53] wolf_1 | [2025-06-13 19:18:53] [ /etc/cont-init.d/15-setup_devices.sh: executing... ] wolf_1 | [2025-06-13 19:18:53] **** Configure devices **** wolf_1 | [2025-06-13 19:18:53] Exec device groups wolf_1 | [2025-06-13 19:18:54] Adding user 'root' to groups: messagebus,root wolf_1 | [2025-06-13 19:18:54] DONE wolf_1 | [2025-06-13 19:18:54] wolf_1 | [2025-06-13 19:18:54] [ /etc/cont-init.d/30-nvidia.sh: executing... ] wolf_1 | [2025-06-13 19:18:54] wolf_1 | [2025-06-13 19:18:54] [ /etc/cont-init.d/init-gamescope.sh: executing... ] wolf_1 | [2025-06-13 19:18:54] Launching the container's startup script as user 'root' wolf_1 | 18:18:54.031336196 INFO | Gstreamer version: 1.26.2-0 wolf_1 | 18:18:54.031919404 DEBUG | XDG_RUNTIME_DIR=/tmp/sockets wolf_1 | 18:18:54.031938386 INFO | Reading config file from: /etc/wolf/cfg/config.toml wolf_1 | 18:18:54.075037985 DEBUG | /dev/dri/renderD128 vendor: Intel Corporation wolf_1 | 18:18:54.075079643 DEBUG | Skipping NVIDIA encoder, not a NVIDIA GPU (2) wolf_1 | libva info: VA-API version 1.22.0 wolf_1 | libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so wolf_1 | libva info: Found init function __vaDriverInit_1_22 wolf_1 | libva info: va_openDriver() returns 0 wolf_1 | 18:18:54.097918093 INFO | Using H264 encoder: qsv wolf_1 | 18:18:54.097952323 DEBUG | Skipping NVIDIA encoder, not a NVIDIA GPU (2) wolf_1 | 18:18:54.098012194 INFO | Using HEVC encoder: qsv wolf_1 | 18:18:54.098027510 DEBUG | Skipping NVIDIA encoder, not a NVIDIA GPU (2) wolf_1 | 18:18:54.098069824 INFO | Using AV1 encoder: qsv wolf_1 | 18:18:54.098134515 DEBUG | Required DMA formats for vapostproc: ["NV12:0x0100000000000009", "YU12", "YV12", "YUYV:0x0100000000000009", "YU16:0x0100000000000009", "AB24:0x0100000000000002", "AR24:0x0100000000000009", "XB24:0x0100000000000002", "P010:0x0100000000000009", "AR30:0x0100000000000009", "AYUV:0x0100000000000009", "Y210:0x0100000000000009", "Y410:0x0100000000000009", "P012:0x0100000000000009", "Y212:0x0100000000000009", "Y412:0x0100000000000009"] wolf_1 | 18:18:54.098306237 DEBUG | Loading server certificates from disk: /etc/wolf/cfg/cert.pem /etc/wolf/cfg/key.pem wolf_1 | 18:18:54.098939401 INFO | [RTP] Starting RTP ping server on ports 48100 and 48200 wolf_1 | 18:18:54.099019162 INFO | RTSP server started on port: 48010 wolf_1 | 18:18:54.099041412 INFO | Starting API server on /tmp/wolf.sock wolf_1 | 18:18:54.099048903 INFO | Starting mDNS service wolf_1 | 18:18:54.099079055 INFO | Control server started on port: 47999 wolf_1 | 18:18:54.099088737 INFO | HTTP server listening on port: 47989 wolf_1 | XDG_RUNTIME_DIR (/tmp/sockets) is not owned by us (uid 0), but by uid 1000! (This could e.g. happen if you try to connect to a non-root PulseAudio as a root user, over the native protocol. Don't do that.) wolf_1 | 18:18:54.099250506 DEBUG | [PULSE] Connecting... wolf_1 | 18:18:54.099279422 DEBUG | [PULSE] Context failed wolf_1 | 18:18:54.099286203 WARN | [PULSE] Unable to connect, Access denied wolf_1 | 18:18:54.099319325 INFO | Starting PulseAudio docker container wolf_1 | 18:18:54.100567502 INFO | HTTPS server listening on port: 47984 wolf_1 | 18:18:54.101273603 WARN | [DOCKER] Container WolfPulseAudio already present, removing first wolf_1 | 18:18:54.308349638 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo wolf_1 | 18:18:54.324174068 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo wolf_1 | 18:18:54.338864231 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/applist wolf_1 | 18:18:56.364995594 DEBUG | [PULSE] Connecting... wolf_1 | 18:18:56.365913510 DEBUG | [PULSE] Pulse connection ready wolf_1 | 18:18:57.363476969 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo wolf_1 | 18:18:57.378291092 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo wolf_1 | 18:18:59.892806202 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.893436604 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.893810421 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.894192287 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.913195589 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.913305072 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.913666118 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.914516858 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.934258039 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.934476980 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.934581605 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.936213855 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.953264711 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.953753317 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.953857410 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:18:59.955046013 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/appasset wolf_1 | 18:19:00.405975250 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo wolf_1 | 18:19:00.421090897 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo wolf_1 | 18:19:03.446435208 DEBUG | 192.168.0.202 [GET] HTTP://192.168.0.117/serverinfo wolf_1 | 18:19:03.462049963 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/serverinfo wolf_1 | 18:19:04.346569251 DEBUG | 192.168.0.202 [GET] HTTPS://192.168.0.117/launch wolf_1 | 18:19:04.346672000 DEBUG | Host app state folder: /etc/wolf/13740123630835630804/Steam, creating paths wolf_1 | 18:19:04.354440634 DEBUG | [STREAM_SESSION] Create wayland compositor wolf_1 | 18:19:04.354503284 DEBUG | [STREAM_SESSION] Create virtual audio sink wolf_1 | 18:19:04.354637639 DEBUG | [GSTREAMER] Starting video producer: waylanddisplaysrc name=wolf_wayland_source render_node=/dev/dri/renderD128 ! video/x-raw(memory:DMABuf), drm-format={NV12:0x0100000000000009,YU12,YV12,YUYV:0x0100000000000009,YU16:0x0100000000000009,AB24:0x0100000000000002,AR24:0x0100000000000009,XB24:0x0100000000000002,AYUV:0x0100000000000009,Y210:0x0100000000000009,Y410:0x0100000000000009,P012:0x0100000000000009,Y212:0x0100000000000009,Y412:0x0100000000000009}, width=1920, height=1080, framerate=120/1 ! wolf_1 | interpipesink sync=true async=false name=13740123630835630804_video max-buffers=1 wolf_1 | 18:19:04.354689089 DEBUG | [GSTREAMER] Starting audio producer: pulsesrc device="virtual_sink_13740123630835630804.monitor" server="/tmp/sockets/pulse-socket" ! audio/x-raw, channels=2, rate=48000 ! queue leaky=downstream max-size-buffers=3 ! interpipesink name="13740123630835630804_audio" sync=true async=false max-buffers=3 wolf_1 | 18:19:04.355092635 DEBUG | [PULSE] Created virtual sink: 3 wolf_1 | 18:19:04.370875322 DEBUG | Setting up waylanddisplaysrc wolf_1 | wolf_1 | (wolf:1): GStreamer-CRITICAL **: 19:19:04.370: Bus bus1 already has a GSource watch wolf_1 | 18:19:04.376654433 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.376673403 DEBUG | [RTSP] received command OPTIONS wolf_1 | 18:19:04.392785852 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.392797753 DEBUG | [RTSP] received command DESCRIBE wolf_1 | 18:19:04.408178453 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.408188648 DEBUG | [RTSP] received command SETUP wolf_1 | 18:19:04.413309142 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.413322247 DEBUG | [RTSP] received command SETUP wolf_1 | 18:19:04.428844969 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.428856663 DEBUG | [RTSP] received command SETUP wolf_1 | 18:19:04.444836965 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.444847426 DEBUG | [RTSP] received command ANNOUNCE wolf_1 | 18:19:04.444912363 DEBUG | [RTSP] Moonlight requested video format HEVC wolf_1 | 18:19:04.444917126 DEBUG | [RTSP] Adjusted video bitrate to 39308 Kbps wolf_1 | 18:19:04.461005129 DEBUG | [RTSP] found session by matching payload: 86.201.60.69 wolf_1 | 18:19:04.461023378 DEBUG | [RTSP] received command PLAY wolf_1 | 18:19:04.464191092 DEBUG | [ENET] connected client: 192.168.0.202:13808 wolf_1 | 18:19:04.464826451 DEBUG | Starting video pipeline: wolf_1 | interpipesrc listen-to=13740123630835630804_video is-live=true stream-sync=restart-ts max-buffers=1 block=false ! wolf_1 | vapostproc ! video/x-raw(memory:VAMemory), format=NV12, chroma-site=mpeg2, colorimetry=bt601 ! wolf_1 | qsvh265enc b-frames=0 gop-size=0 idr-interval=1 ref-frames=1 bitrate=39308 rate-control=cbr low-latency=1 target-usage=6 ! wolf_1 | h265parse ! wolf_1 | video/x-h265, profile=main, stream-format=byte-stream ! wolf_1 | rtpmoonlightpay_video name=moonlight_pay payload_size=1392 fec_percentage=20 min_required_fec_packets=2 ! wolf_1 | appsink sync=false name=wolf_udp_sink wolf_1 | wolf_1 | 18:19:04.473793977 WARN | Received MOUSE_MOVE_REL_PACKET but no mouse device is present wolf_1 | 18:19:04.484385395 WARN | Received MOUSE_MOVE_REL_PACKET but no mouse device is present wolf_1 | 18:19:04.494078175 DEBUG | Setting up wolf_udp_sink wolf_1 | 0:00:10.479104951 1 0x7c060801cfa0 WARN basesink gstbasesink.c:1248:gst_base_sink_query_latency:<13740123630835630804_video> warning: Pipeline construction is invalid, please add queues. wolf_1 | 0:00:10.479124927 1 0x7c060801cfa0 WARN basesink gstbasesink.c:1248:gst_base_sink_query_latency:<13740123630835630804_video> warning: Not enough buffering available for the processing deadline of 0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional data. Shortening processing latency to 0:00:00.000000000. wolf_1 | 18:19:04.505080174 DEBUG | Wayland source message: WAYLAND_DISPLAY = wayland-1 wolf_1 | 18:19:04.505100873 INFO | Wayland display ready, listening on: wayland-1 wolf_1 | 18:19:04.506214386 DEBUG | /proc/driver/nvidia/gpus/0000:00:02.0/information doesn't exists, this might be normal if the GPU is not Nvidia wolf_1 | 0:00:10.485413267 1 0x7c0604000ff0 WARN qsvencoder gstqsvencoder.cpp:1115:gst_qsv_encoder_init_encode_session:<qsvh265enc1> MFXVideoENCODE::Query returned warning 5 (MFX_WRN_INCOMPATIBLE_VIDEO_PARAM) wolf_1 | 18:19:04.511509112 DEBUG | /dev/dri/renderD128 vendor: Intel Corporation wolf_1 | 18:19:04.511555154 DEBUG | [DOCKER] Using fake-udev, creating /etc/wolf/13740123630835630804/Steam/udev/data wolf_1 | WARNING: Kernel has no file descriptor comparison support: Operation not permitted wolf_1 | 18:19:04.515872955 DEBUG | /dev/dri/renderD128 vendor: Intel Corporation wolf_1 | 18:19:04.515959733 DEBUG | [DOCKER] Setting DeviceCgroupRules for hidraw:239 and input:13 wolf_1 | 18:19:04.516003908 DEBUG | [DOCKER] Container options: {"HostConfig":{"IpcMode":"host","CapAdd":["SYS_ADMIN","SYS_NICE","SYS_PTRACE","NET_RAW","MKNOD","NET_ADMIN"],"SecurityOpt":["seccomp=unconfined","apparmor=unconfined"],"Ulimits":[{"Name":"nofile","Hard":10240,"Soft":10240}],"Privileged":false,"DeviceCgroupRules":["c 239:* rwm","c 13:* rwm"]}} wolf_1 | 18:19:04.517558019 WARN | [DOCKER] Container WolfSteam_13740123630835630804 already present, removing first wolf_1 | 0:00:10.507215242 1 0x7c0604000ff0 WARN basesrc gstbasesrc.c:4255:gst_base_src_push_segment:<interpipesrc0> segment format mismatched, ignore wolf_1 | 18:19:04.579366906 INFO | Creating Xbox joypad for controller 0 wolf_1 | 18:19:04.579580947 DEBUG | [INPUT] Sending PlugDeviceEvent for joypad 0 of type: 3 wolf_1 | 18:19:04.579687633 DEBUG | 13740123630835630804 received hot-plug device event wolf_1 | 18:19:04.633016095 INFO | Creating Xbox joypad for controller 1 wolf_1 | 18:19:04.633324619 DEBUG | [INPUT] Sending PlugDeviceEvent for joypad 1 of type: 3 wolf_1 | 18:19:04.633437920 DEBUG | 13740123630835630804 received hot-plug device event wolf_1 | 18:19:04.679827000 INFO | [DOCKER] Starting container: /WolfSteam_13740123630835630804 wolf_1 | 18:19:04.679874493 DEBUG | [DOCKER] Starting container: { wolf_1 | id: a46a26aafe22a5a8dac7778fbd22b96aa95c8a0ac94533d575057245cabd0e1e wolf_1 | name: /WolfSteam_13740123630835630804 wolf_1 | image: ghcr.io/games-on-whales/steam:edge wolf_1 | status: 0 wolf_1 | ports: [] wolf_1 | mounts: [/tmp/sockets/pulse-socket:/tmp/sockets/pulse-socket:rw, /tmp/sockets/wayland-1:/tmp/sockets/wayland-1:rw, /etc/wolf/13740123630835630804/Steam:/home/retro:rw, /etc/wolf/13740123630835630804/Steam/udev:/run/udev/:rw, /etc/wolf/fake-udev:/usr/bin/fake-udev:ro] wolf_1 | devices: [/dev/dri/card0:/dev/dri/card0:mrw, /dev/dri/renderD128:/dev/dri/renderD128:mrw] wolf_1 | env: ["PROTON_LOG=1", "RUN_SWAY=true", "GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*", "PULSE_SOURCE=virtual_sink_13740123630835630804.monitor", "GAMESCOPE_REFRESH=120", "INTEL_DEBUG=norbc", "PUID=1000", "PULSE_SINK=virtual_sink_13740123630835630804", "WAYLAND_DISPLAY=wayland-1", "GAMESCOPE_HEIGHT=1080", "PGID=1000", "PULSE_SERVER=/tmp/sockets/pulse-socket", "XDG_RUNTIME_DIR=/tmp/sockets", "GAMESCOPE_WIDTH=1920", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "UMASK=000", "UNAME=retro", "HOME=/home/retro", "TZ=Europe/London", "DEBIAN_FRONTEND=noninteractive", "NEEDRESTART_SUSPEND=1", "GAMESCOPE_VERSION=3.15.14", "BUILD_ARCHITECTURE=amd64", "DEB_BUILD_OPTIONS=noddebs"] wolf_1 | } wolf_1 | 18:19:04.679912097 DEBUG | [DOCKER] Writing hwdb file: /etc/wolf/13740123630835630804/Steam/udev/data/c13:71 wolf_1 | 18:19:04.680191812 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/event7 c 13 71 && chmod 777 /dev/input/event7 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9ldmVudDcAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTczL2V2ZW50NwBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTcxAFNFUU5VTT03AFNVQlNZU1RFTT1pbnB1dABUQUdTPTpzZWF0OnVhY2Nlc3M6AFVTRUNfSU5JVElBTElaRUQ9MTc0OTgzODc0NAA= wolf_1 | 18:19:04.685852250 INFO | Creating Xbox joypad for controller 2 wolf_1 | 18:19:04.686091365 DEBUG | [INPUT] Sending PlugDeviceEvent for joypad 2 of type: 3 wolf_1 | 18:19:04.686186960 DEBUG | 13740123630835630804 received hot-plug device event wolf_1 | 18:19:04.719791694 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/js0 c 13 0 && chmod 777 /dev/input/js0 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9qczAAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTczL2pzMABJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTAAU0VRTlVNPTcAU1VCU1lTVEVNPWlucHV0AFRBR1M9OnNlYXQ6dWFjY2VzczoAVVNFQ19JTklUSUFMSVpFRD0xNzQ5ODM4NzQ0AA== wolf_1 | 18:19:04.743448556 DEBUG | [DOCKER] Writing hwdb file: /etc/wolf/13740123630835630804/Steam/udev/data/c13:72 wolf_1 | 18:19:04.743641661 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/event8 c 13 72 && chmod 777 /dev/input/event8 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9ldmVudDgAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc0L2V2ZW50OABJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTcyAFNFUU5VTT03AFNVQlNZU1RFTT1pbnB1dABUQUdTPTpzZWF0OnVhY2Nlc3M6AFVTRUNfSU5JVElBTElaRUQ9MTc0OTgzODc0NAA= wolf_1 | 18:19:04.772160350 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/js1 c 13 1 && chmod 777 /dev/input/js1 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9qczEAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc0L2pzMQBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTEAU0VRTlVNPTcAU1VCU1lTVEVNPWlucHV0AFRBR1M9OnNlYXQ6dWFjY2VzczoAVVNFQ19JTklUSUFMSVpFRD0xNzQ5ODM4NzQ0AA== wolf_1 | 18:19:04.799570144 DEBUG | [DOCKER] Writing hwdb file: /etc/wolf/13740123630835630804/Steam/udev/data/c13:73 wolf_1 | 18:19:04.799802067 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/event9 c 13 73 && chmod 777 /dev/input/event9 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9ldmVudDkAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc1L2V2ZW50OQBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTczAFNFUU5VTT03AFNVQlNZU1RFTT1pbnB1dABUQUdTPTpzZWF0OnVhY2Nlc3M6AFVTRUNfSU5JVElBTElaRUQ9MTc0OTgzODc0NAA= wolf_1 | 18:19:04.831628214 DEBUG | [DOCKER] Executing command: mkdir -p /dev/input && mknod /dev/input/js2 c 13 2 && chmod 777 /dev/input/js2 && fake-udev -m LklOUFVUX0NMQVNTPWpveXN0aWNrAEFDVElPTj1hZGQAQ1VSUkVOVF9UQUdTPTpzZWF0OnVhY2Nlc3M6AERFVk5BTUU9L2Rldi9pbnB1dC9qczIAREVWUEFUSD0vZGV2aWNlcy92aXJ0dWFsL2lucHV0L2lucHV0MTc1L2pzMgBJRF9JTlBVVD0xAElEX0lOUFVUX0pPWVNUSUNLPTEASURfU0VSSUFMPW5vc2VyaWFsAE1BSk9SPTEzAE1JTk9SPTIAU0VRTlVNPTcAU1VCU1lTVEVNPWlucHV0AFRBR1M9OnNlYXQ6dWFjY2VzczoAVVNFQ19JTklUSUFMSVpFRD0xNzQ5ODM4NzQ0AA== wolf_1 | 18:19:04.836647223 DEBUG | [GSTREAMER] Forcing IDR wolf_1 | 18:19:04.913357989 DEBUG | Starting audio pipeline: wolf_1 | interpipesrc listen-to=13740123630835630804_audio is-live=true stream-sync=restart-ts max-bytes=0 max-buffers=3 block=false ! wolf_1 | queue max-size-buffers=3 leaky=downstream ! audiorate ! audioconvert ! wolf_1 | opusenc bitrate=96000 bitrate-type=cbr frame-size=5 bandwidth=fullband audio-type=restricted-lowdelay max-payload-size=1400 ! wolf_1 | rtpmoonlightpay_audio name=moonlight_pay packet_duration=5 encrypt=true aes_key="ae6046f0d796b8e86597968d005aefae" aes_iv="1536159154" ! wolf_1 | appsink name=wolf_udp_sink wolf_1 | 18:19:04.916128810 DEBUG | Setting up wolf_udp_sink wolf_1 | 0:00:12.330287507 1 0x7c06040017d0 WARN basesrc gstbasesrc.c:4255:gst_base_src_push_segment:<interpipesrc1> segment format mismatched, ignore ```
bsakaguchi 2026-10-15 12:57:06 +00:00
  • closed this issue
  • added the
    question
    label
Author
Owner

@ABeltramo commented on GitHub (Jun 19, 2025):

When the host OS runs out of memory there are so many things that start failing in a "last resort" attempt at claiming some memory.

I'm not sure there's anything specifically that we can do in Wolf, but I'm open to suggestions..

<!-- gh-comment-id:2989206714 --> @ABeltramo commented on GitHub (Jun 19, 2025): When the host OS runs out of memory there are so many things that start failing in a "last resort" attempt at claiming some memory. I'm not sure there's anything specifically that we can do in Wolf, but I'm open to suggestions..
Author
Owner

@Trasen commented on GitHub (Jun 20, 2025):

Is there any reliable profiling tools available? If so we could hook that in to the Wolf containers and at least be able to get a heat map of what is causing this recursive "last ditch attempt of survival but never outright crashing" behaviour.

Understanding the "how it happens" and in which order things start to choke could lead to a possible solution.

But as with most software, outside of writing an entire scheduler around wolf which actively manages all possible processes, when hardware runs out it runs out.

<!-- gh-comment-id:2989719880 --> @Trasen commented on GitHub (Jun 20, 2025): Is there any reliable profiling tools available? If so we could hook that in to the Wolf containers and at least be able to get a heat map of what is causing this recursive "last ditch attempt of survival but never outright crashing" behaviour. Understanding the "how it happens" and in which order things start to choke could lead to a possible solution. But as with most software, outside of writing an entire scheduler around wolf which actively manages all possible processes, when hardware runs out it runs out.
Author
Owner

@Lombra commented on GitHub (Jun 21, 2025):

I've not used these Docker features before, but I learnt that you can set some restrictions on system resources on containers. Wolf applications are launched as separate containers as I discovered, so I can't set any restrictions on those. (?) I tried setting 1 GB reserved memory for the main container, but that didn't seem to help. It wouldn't be a particularly smart solution, but if I could hardcode a memory limit for the application containers, maybe that could work?

<!-- gh-comment-id:2993579262 --> @Lombra commented on GitHub (Jun 21, 2025): I've not used these Docker features before, but I learnt that you can set some restrictions on system resources on containers. Wolf applications are launched as separate containers as I discovered, so I can't set any restrictions on those. (?) I tried setting 1 GB reserved memory for the main container, but that didn't seem to help. It wouldn't be a particularly smart solution, but if I could hardcode a memory limit for the application containers, maybe that could work?
Author
Owner

@salty2011 commented on GitHub (Jun 21, 2025):

Hey @Lombra

In the config.toml you can apply launch options for the app in the variable

base_create_json = """
{
  "HostConfig": {
    "IpcMode": "host",
    "CapAdd": ["SYS_ADMIN", "SYS_NICE"],
    "Privileged": false
  }
}
\
"""

There are options for setting memory and cpu limits here:

https://docs.docker.com/engine/api/v1.40/#tag/Container/operation/ContainerCreate

<!-- gh-comment-id:2993653827 --> @salty2011 commented on GitHub (Jun 21, 2025): Hey @Lombra In the config.toml you can apply launch options for the app in the variable ```toml base_create_json = """ { "HostConfig": { "IpcMode": "host", "CapAdd": ["SYS_ADMIN", "SYS_NICE"], "Privileged": false } } \ """ ``` There are options for setting memory and cpu limits here: https://docs.docker.com/engine/api/v1.40/#tag/Container/operation/ContainerCreate
Author
Owner

@Trasen commented on GitHub (Jun 21, 2025):

Hey @Lombra

In the config.toml you can apply launch options for the app in the variable

base_create_json = """
{
"HostConfig": {
"IpcMode": "host",
"CapAdd": ["SYS_ADMIN", "SYS_NICE"],
"Privileged": false
}
}

"""

There are options for setting memory and cpu limits here:

https://docs.docker.com/engine/api/v1.40/#tag/Container/operation/ContainerCreate

Salty being an absolute unit as always, hats off :D

<!-- gh-comment-id:2993658561 --> @Trasen commented on GitHub (Jun 21, 2025): > Hey @Lombra > > In the config.toml you can apply launch options for the app in the variable > > base_create_json = """ > { > "HostConfig": { > "IpcMode": "host", > "CapAdd": ["SYS_ADMIN", "SYS_NICE"], > "Privileged": false > } > } > \ > """ > > There are options for setting memory and cpu limits here: > > https://docs.docker.com/engine/api/v1.40/#tag/Container/operation/ContainerCreate Salty being an absolute unit as always, hats off :D
Author
Owner

@Lombra commented on GitHub (Jun 22, 2025):

Thank you!

I set a memory limit on the Steam container, which prevents it from taking the rest of the system down with it, so that's a big improvement, at least. The Moonlight stream remains intact, but the application soft locks. In the case of Steam, it seems like steamwebhelper locks up. Terminating it via the shell salvages the session.

A couple of similar options to explore:
https://superuser.com/questions/1645722/how-to-limit-the-sum-of-memory-used-by-a-group-of-docker-containers
https://unix.stackexchange.com/questions/537645/how-to-limit-docker-total-resources

<!-- gh-comment-id:2994452376 --> @Lombra commented on GitHub (Jun 22, 2025): Thank you! I set a memory limit on the Steam container, which prevents it from taking the rest of the system down with it, so that's a big improvement, at least. The Moonlight stream remains intact, but the application soft locks. In the case of Steam, it seems like `steamwebhelper` locks up. Terminating it via the shell salvages the session. A couple of similar options to explore: https://superuser.com/questions/1645722/how-to-limit-the-sum-of-memory-used-by-a-group-of-docker-containers https://unix.stackexchange.com/questions/537645/how-to-limit-docker-total-resources
Author
Owner

@Lombra commented on GitHub (Jul 6, 2025):

I've settled for a cgroup for now, managed by systemd.

Create a slice file, defining the resource limits:
/etc/systemd/system/docker.slice

[Unit]
Description=Slice that limits docker resources
Before=slices.target

[Slice]
MemoryAccounting=true
MemoryMax=19G

Documentation recommends using MemoryHigh rather than MemoryMax, as a soft limit, but that just seems to cause containers to freeze rather than crash.
Configure Docker to use the cgroup.
/etc/docker/daemon.json

{
	"cgroup-parent": "docker.slice"
}

Now, all Docker containers has a shared memory quota of 19 GB. (as far as I understand) This way I don't need to configure containers individually.

It is also possible to set a percentage value, but that didn't seem as useful as I first imagined.

<!-- gh-comment-id:3042349748 --> @Lombra commented on GitHub (Jul 6, 2025): I've settled for a cgroup for now, managed by systemd. Create a slice file, defining the resource limits: `/etc/systemd/system/docker.slice` ``` [Unit] Description=Slice that limits docker resources Before=slices.target [Slice] MemoryAccounting=true MemoryMax=19G ``` Documentation recommends using `MemoryHigh` rather than `MemoryMax`, as a soft limit, but that just seems to cause containers to freeze rather than crash. Configure Docker to use the cgroup. `/etc/docker/daemon.json` ```json { "cgroup-parent": "docker.slice" } ``` Now, all Docker containers has a shared memory quota of 19 GB. (as far as I understand) This way I don't need to configure containers individually. It is also possible to set a percentage value, but that didn't seem as useful as I first imagined.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/wolf#142
No description provided.