Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#3270: Espanso na Macu v paměti neustále roste, až na vyšší jednotky GB. Co s tím?

Espanso je dost nepostradatelná pomůcka a nechce se mi ho měnit, ale má problém. Už dlouho a známý. V paměti prostě jenom bobtná. Jak to tedy řešit?

Memory leak on Mac  #1675 je chyba neopravená od září 2023, byť to aktuálně (v létě 2026) vypadá, že snad v dev branchi řešení už je. 

Espanso umožňuje vyvoolat “espanso restart”, takže to může prostě udělat v okamžiku, kdy zjistíte, že požírá kupu paměti.

Nebo, to nejsnazší řešení je:

crontab -e

a přidat tam  (11 je 11:00 dopoledne, takže si tam klidně dejte hodinu kdy nepracujete)

0 11 * * * espanso restart >/dev/null 2>&1

A nezapomeňte, crontab -e se ukončuje “:wg”. 

TIP: Espanso coby náhrada AutoHotKey (AHK) a proč je to nejlepší text-expander pro Mac, Windows i Linux

Případně můžete ještě pokročilejší, tedy nechat hlídat kolik paměti má, pokud jí má nadměrně, tak teprve poté restartovat. 

Tedy např něco jako espanso-mem-watch.sh:

#!/bin/zsh
LIMIT_MB=800
ESPANSO=“/Applications/espanso/Espanso.app/Contents/MacOS/espanso“
APP=“/Applications/espanso/Espanso.app“
LOG=“/tmp/espanso-watchdog.log“

pids=(${(f)“$(/usr/bin/pgrep -if ‚[e]spanso‘)“})
if (( ${#pids} == 0 )); then
  echo „$(date ‚+%F %T‘) Espanso not running“ >> „$LOG“
  exit 0
fi

top_args=()
for p in „${pids[@]}“; do
  top_args+=(-pid „$p“)
done

mem_mb=$(
  /usr/bin/top -l 1 „${top_args[@]}“ -stats pid,command,rsize 2>/dev/null |
  /usr/bin/awk ‚
    /^[[:space:]]*[0-9]+[[:space:]]+espanso[[:space:]]/ {
      m=$3
      gsub(/\+/, „“, m)
      unit=substr(m, length(m), 1)
      val=substr(m, 1, length(m)-1) + 0
      if (unit == „G“) val *= 1024
      else if (unit == „M“) val = val
      else if (unit == „K“) val /= 1024
      sum += val
    }
    END { printf „%.0f\n“, sum }
 ‚
)

[[ -z „$mem_mb“ ]] && mem_mb=0
echo „$(date ‚+%F %T‘) Espanso top MEM: ${mem_mb} MB“ >> „$LOG“
if (( mem_mb > LIMIT_MB )); then
  echo „$(date ‚+%F %T‘) Restarting Espanso, over ${LIMIT_MB} MB“ >> „$LOG“
  „$ESPANSO“ restart >> „$LOG“ 2>&1 || {
    echo „$(date ‚+%F %T‘) espanso restart failed, killing/opening app“ >> „$LOG“
    /usr/bin/pkill -if ‚[e]spanso‘
    /usr/bin/open „$APP“
  }
fi

Nezapomenout ho označit pomocí “chmod +x ~/bin/espanso-mem-watch.sh”. a 

A pouštět můžete přes cron stejně jako předchozí.

Kde můžete použít i jednodušší variantu skriptu než ten velký předchozí a dát to prostě do crontab:

limit=800; pids=(${(f)“$(/usr/bin/pgrep -if ‚[e]spanso‘)“}); (( ${#pids} == 0 )) && exit 0; args=(); for p in „${pids[@]}“; do args+=(-pid „$p“); done; mem=$(/usr/bin/top -l 1 „${args[@]}“ -stats pid,command,rsize 2>/dev/null | /usr/bin/awk ‚/^[[:space:]]*[0-9]+[[:space:]]+espanso[[:space:]]/ {m=$3; gsub(/\+/, „“, m); u=substr(m,length(m),1); v=substr(m,1,length(m)-1)+0; if(u==“G“) v*=1024; else if(u==“K“) v/=1024; sum+=v} END {printf „%.0f\n“, sum}‘); echo „Espanso top MEM: ${mem:-0} MB“; (( ${mem:-0} > limit )) && /Applications/espanso/Espanso.app/Contents/MacOS/espanso restart

Případně si jen pomoci “which espanso” ověřte kde to vaše je a změňte ono spouštění na konci.