Closed samoshkin closed 6 years ago
Redesigned cpu.sh logic, split it into 2 files:
cpu.sh
returns immediately, same to mem.sh
and loadavg.sh
.$status-refresh-interval
using vmstat
or iostat
or top
and stores last value in temp file (examined by cpu.sh later).Now, from a sysdig trace, we can ensure, that cpu.sh
, mem.sh
, loadavg.sh
are run strictly once per $status-refresh-interval.
19:43:46 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/mem.sh 13638
19:43:46 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/loadavg.sh 13639
19:43:46 | /home/alexeys/.tmux/plugins/tmux-online-status/scripts/online_status_icon.sh 13641
19:43:46 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/cpu.sh 13637
19:43:51 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/mem.sh 13786
19:43:51 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/loadavg.sh 13787
19:43:51 | /home/alexeys/.tmux/plugins/tmux-online-status/scripts/online_status_icon.sh 13789
19:43:51 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/cpu.sh 13785
19:43:56 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/mem.sh 13934
19:43:56 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/loadavg.sh 13935
19:43:56 | /home/alexeys/.tmux/plugins/tmux-online-status/scripts/online_status_icon.sh 13937
19:43:56 | /home/alexeys/.tmux/plugins/tmux-plugin-sysstat/scripts/cpu.sh 13933
As a side effect, when you start tmux session, you will immediately get average CPU usage since the system bootstrap in your status line, which is replaced by CPU average of each next interval.
See the background for this issue here: https://github.com/samoshkin/tmux-config/issues/4
In a short,
cpu.sh
is long running process, which takes$status-refresh-interval-1
seconds to complete. This cause various issues regarding status line refresh behavior:cmd ~/.tmux/plugins/sysstat/scripts/cpu.sh not ready
message.cpu.sh
completes after 4 seconds, tmux refreshes all widgets in status line (not only cpu). This cause excessive spawns of other widget's scripts (mem, loadavg, swap, any other like tmux-status-online), so refresh behavior of status bar doesn't followstatus-refresh-interval
settings any more.The idea for solution is to split
cpu.sh
logic into: