muesli / deckmaster

An application to control your Elgato Stream Deck on Linux
MIT License
257 stars 46 forks source link

Deckmaster process randomly using large amount of processor power #53

Open HoodedDeath opened 3 years ago

HoodedDeath commented 3 years ago

Description At seemingly random times, the deckmaster process begins consuming roughly 20% of my Ryzen 7 3700X. I am currently unable to confirm if this is always the case, but for the most recent occurence, the log through systemd contians these two lines at the end:

XGB: xgb.go:455: A read error is unrecoverable: read unix @->/tmp/.X11-unix/X0: read: connection reset by peer
XGB: xgb.go:455: A read error is unrecoverable: EOF

Although this error seems to be the result of logging out and logging back in, this is the only clue I have. If needed for further info, I can run deckmaster through a normal shell instance to get more complete output. If there are verbosity options available, please inform.

Desktop:

Log Full output of systemctl --user status streamdeck.service:

● streamdeck.service - Deckmaster Service
     Loaded: loaded (/home/death/.config/systemd/user/streamdeck.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-11-11 23:43:14 MST; 1h 44min ago
TriggeredBy: ● streamdeck.path
   Main PID: 5242 (deckmaster)
      Tasks: 24 (limit: 38376)
     Memory: 828.9M
        CPU: 4h 33min 18.437s
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/streamdeck.service
             └─5242 /usr/bin/deckmaster -deck /home/death/.local/share/streamdeck-deckmaster/main.deck -brightness 60

Nov 11 23:43:20 Scarlet deckmaster[5242]: Active window changed to Opera (60817417, Nmap - ArchWiki - Opera)
Nov 11 23:43:20 Scarlet deckmaster[5242]: Active window changed to Opera (60817419, 41124 – (need-to-run-perl-cleaner) configure: error: XML::Parser perl module is required for [...] - YOU NEED TO RUN `perl-cleaner' - Opera)
Nov 11 23:43:20 Scarlet deckmaster[5242]: Active window changed to Opera (60817420, Gentoo Forums :: View topic - media-libs/libsdl2 fails to build, requires wayland? (gles2) - Opera)
Nov 11 23:43:21 Scarlet deckmaster[5242]: Active window changed to Opera (60817421, /etc/portage/package.mask - Gentoo Wiki - Opera)
Nov 11 23:43:21 Scarlet deckmaster[5242]: Active window changed to Opera (60817422, AUR (en) - minecraft-server-manager - Opera)
Nov 11 23:43:21 Scarlet deckmaster[5242]: Active window changed to Opera (60817423, Welcome to Opera - Opera)
Nov 11 23:43:21 Scarlet deckmaster[5242]: Active window changed to Opera (60817425, Opera - Update complete! - Opera)
Nov 11 23:43:21 Scarlet deckmaster[5242]: Active window changed to Opera (60817426, [1.17.1 (Crash/No Boot)] On launch a Minecraft window never appears and comes with a crash (Mac 2012 Macos Mojave) · Issue #6278 · sp614x/optifine - Opera)
Nov 11 23:43:21 Scarlet deckmaster[5242]: XGB: xgb.go:455: A read error is unrecoverable: read unix @->/tmp/.X11-unix/X0: read: connection reset by peer
Nov 11 23:43:21 Scarlet deckmaster[5242]: XGB: xgb.go:455: A read error is unrecoverable: EOF

Configuration:

[[keys]]
  index = 0
  [keys.widget]
    id = "time"
    interval = 1000
    [keys.widget.config]
      format = "%D;%M;%d"
  [keys.action]
    exec = "systemctl --user restart streamdeck.service"

[[keys]]
  index = 1
  [keys.widget]
    interval = 1000
    id = "time"
    [keys.widget.config]
      format = "%h:%i;%s %a"

[[keys]]
  index = 2
  [keys.widget]
    id = "weather"
    interval = 60000
    [keys.widget.config]
      location = "orem"
      unit = "fahrenheit"

[[keys]]
  index = 3
  [keys.widget]
    id = "top"
    [keys.widget.config]
      mode = "cpu"

[[keys]]
  index = 4
  [keys.widget]
    id = "top"
    [keys.widget.config]
      mode = "memory"

[[keys]]
  index = 5
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Vol \\/"
  [keys.action]
    keycode = "Volumedown"

[[keys]]
  index = 6
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Vol /\\"
  [keys.action]
    keycode = "Volumeup"

[[keys]]
  index = 7
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Mute"
  [keys.action]
    keycode = "mute"

[[keys]]
  index = 8
  [keys.widget]
    id = "command"
    interval = 60000
    [keys.widget.config]
      command = "echo 'Avail'; echo 'Root:'; df --output=avail --human-readable /dev/mapper/main-root | tail -n 1 | sed 's/^ *//g'"

[[keys]]
  index = 9
  [keys.widget]
    id = "command"
    interval = 60000
    [keys.widget.config]
      command = "echo 'Avail'; echo 'Extra:'; df --output=avail --human-readable /dev/mapper/cryptext | tail -n 1 | sed 's/^ *//g'"

[[keys]]
  index = 10
  [keys.widget]
    id = "command"
    interval = 60000
    [keys.widget.config]
      command = "echo 'Avail'; echo 'Swap:'; /home/death/scripts/output-free-swap"

[[keys]]
  index = 11
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Play/Pause"
  [keys.action]
    keycode = "Playpause"

[[keys]]
  index = 12
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Deafen"
  [keys.action]
    keycode = "Rightshift-F7"

[[keys]]
  index = 13
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Mute"
  [keys.action]
    keycode = "Rightshift-F8"

[[keys]]
  index = 14
  [keys.widget]
    id = "button"
    [keys.widget.config]
      label = "Screen"
  [keys.action]
    exec = "/home/death/scripts/rotate-screen"
  [keys.action_hold]
    exec = "/home/death/scripts/rotate-screen --fix"

[[keys]]
  index = 15
  [keys.widget]
    id = "button"
    [keys.widget.config]
      icon = "/opt/discord/discord.png"
  [keys.action]
    exec = "discord"

[[keys]]
  index = 16
  [keys.widget]
    id = "command"
    interval = 3600000
    [keys.widget.config]
      command = "echo 'Find'; echo 'Cursor'"
  [keys.action]
    exec = "xfce4-find-cursor"

[[keys]]
  index = 21
  [keys.widget]
    id = "command"
    [keys.widget.config]
      command = "echo 'CPU Top:'; /home/death/scripts/get-top-cpu-usage"

[[keys]]
  index = 22
  [keys.widget]
    id = "button"
    [keys.widget.config]
      icon = "/home/death/pictures/mango.png"
  [keys.action]
    exec = "xdotool key F14"

[[keys]]
  index = 23
  [keys.widget]
    id = "button"
    [keys.widget.config]
      icon = "/usr/share/icons/hicolor/256x256/apps/steam.png"
  [keys.action]
    exec = "steam-runtime"

[[keys]]
  index = 24
  [keys.widget]
    id = "command"
    [keys.widget.config]
      command = "echo \"CPU\"; /home/death/scripts/output-tctl"

[[keys]]
  index = 25
  [keys.widget]
    id = "command"
    [keys.widget.config]
      command = "echo \"GPU\"; /home/death/scripts/output-edge"

[[keys]]
  index = 26
  [keys.widget]
    id = "command"
    interval = 10000
    [keys.widget.config]
      command = "echo \"BATT\"; /home/death/scripts/print-battery-percent"

[[keys]]
  index = 29
  [keys.widget]
    id = "command"
    [keys.widget.config]
      command = "echo 'Hold'; echo 'LMB'"
  [keys.action]
    exec = "xdotool mousedown 1"
  [keys.action_hold]
    exec = "xdotool keydown e"

[[keys]]
  index = 30
  [keys.widget]
    id = "button"
    [keys.widget.config]
      icon = "/usr/share/icons/hicolor/256x256/apps/opera.png"
  [keys.action]
    exec = "opera"

[[keys]]
  index = 31
  [keys.widget]
    id = "command"
    [keys.widget.config]
      command = "echo 'Togg'; echo 'F9'"
  [keys.action]
    exec = "/home/death/toggle-f9"
HoodedDeath commented 3 years ago

Have now confirmed Deckmaster's high CPU usage starts when logging out and logging back in. Xorg read error potentially caused by a bug Opera is having on my system where every Opera window fights for focus as fast as possible. This may be causing some pilling up in Deckmaster's window-change queue

mtwb47 commented 1 year ago

Having the exact same problem. It was using 200+% according to htop. 2023-07-11_00-25

And I do not use Opera, so that's not the issue, at least not for me. Restarting the deck solves the problem. I'm going to run Deckmaster through the terminal for a bit and see if it eventually spits out anything interesting.

Unfortunately, it looks like Deckmater is abandoned, which is disappointing.

HoodedDeath commented 1 year ago

@mtwb47 I forgot to leave a mention here about this, but I did find the widget that was causing the issue. Same idea as yours, I ran Deckmaster through a terminal emulator and let it sit. If I remember right, I removed the window switcher widget (or whatever it's called that lets you focus to the previous window that was focused) and the issue went away. The program output gave a whole bunch of Xorg read errors, so that widget was my suspect and it seemed to be correct. But I haven't tested that out recently and have since switched to Wayland and not touched that widget.

mtwb47 commented 1 year ago

@HoodedDeath Oh, thanks! That did it for me too. easy fixes are always the best.