Slow mac quando Terminal è stato aperto per un po 'di tempo

0

Quando ho Terminal.app aperto per un po 'di tempo (principalmente dopo 2-3 ore), tutto inizia a rallentare. Quando scrivo, c'è un ritardo per ogni carattere e tutte le applicazioni sono in ritardo durante lo scorrimento. Se riavvio Terminal, va via e il mio mac è veloce e scattante di nuovo. Ma i problemi tornano dopo alcune ore. È particolarmente brutto quando ho una connessione ssh aperta su uno dei miei server.

Uso Terminal molto (sono uno sviluppatore), quindi mi dà fastidio doverlo riavviare.

Hai idea di come trovare il problema? Non riesco a trovare nulla su questo quando su Google.

Allegherò alcuni screenshot da Activity Monitor, presi mentre succede, solo per aiutare.

La mia macchina: Retina MacBook Pro, Intel Core i7 da 2,6 GHz, 16 GB di RAM.

AGGIORNAMENTO 1

Contenuto dei miei file di avvio di bash:

/ etc / profile:

# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
    eval '/usr/libexec/path_helper -s'
fi

if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

/ etc / bashrc:

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
# Tell the terminal about the working directory at each prompt.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ] && [ -z "$INSIDE_EMACS" ]; then
    update_terminal_cwd() {
        # Identify the directory using a "file:" scheme URL,
        # including the host name to disambiguate local vs.
        # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
    }
    PROMPT_COMMAND="update_terminal_cwd; $PROMPT_COMMAND"
fi

~ / .bash_profile:

export PATH=/usr/local/bin:$PATH
export JAVA_HOME='/usr/libexec/java_home -v 1.7'

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

~ / .bash_login: Non ho questo file

~ / .profile:

export JAVA_HOME=/Library/Java/Home

export CLICOLOR=1
export LSCOLORS=exfxcxdxbxegedabagacad

# MacPorts Installer addition on 2012-10-02_at_22:35:07: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.

homebrew=/usr/local/bin:/usr/local/sbin
export PATH=$homebrew:$PATH

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

~ / .bashrc:

mygrants() {
  mysql -B -N $@ -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql $@ | \
  sed 's/\(GRANT .*\)/;/;s/^\(Grants for .*\)/##  ##/;/##/{x;p;x;}'
}
    
posta swenedo 23.12.2014 - 00:04
fonte

2 risposte

1

Dovrai ampliare la tua ricerca. Non c'è niente negli screenshot che punta a Terminal. Né qualsiasi cosa nella mia esperienza, ho lasciato correre Terminal per giorni senza alcun effetto negativo.

È possibile che tu stia iniziando un'attività che sta andando via con il processore. È possibile impostare Activity Monitor per mostrare tutti i processi in modo gerarchico e assegnare le attività direttamente sotto scrutinio più vicino a Terminal, ma sarei più incline a pensare che qualunque cosa sia è qualcosa che hai generato come processo separato (usando & alla fine di un comando).

L'uscita da Terminal ti restituisce la tua prestazione immediatamente? Ciò indicherebbe che il processo è ancora in esecuzione come sottoattività di Terminal.

In entrambi i casi, imposta Activity Monitor per mostrare tutti i processi e ordina l'elenco in base a% CPU. Guarda cosa galleggia verso l'alto.

C'è qualcosa di insolito nel tuo $ PROMPT_COMMAND? Questo è un comando che viene eseguito dalla shell appena prima che venga visualizzato il prompt. Mi sembra un posto in cui un tempo-waster potrebbe nascondersi.

ADDENDUM: Ho appena notato il tuo commento "... quando ho una sessione ssh aperta su uno dei miei server". Accettate anche le sessioni di ssh in arrivo? È possibile che tu sia sotto attacco. Qualcuno sta cercando di aprire una sessione SSH e sta indovinando le password. Se stanno indovinando molto velocemente, possono mettere la tua macchina in ginocchio.

Ci ho pensato prima, perché l'ho visto accadere quando abilito l'accesso remoto e ho un indirizzo IP visibile pubblicamente. Una volta che i cattivi notano che la tua porta 22 è aperta dalla WAN (e lo faranno, entro poche ore), la sbatteranno con i tentativi di accesso. La correzione (temporanea) consiste nel disabilitare l'accesso remoto per alcuni minuti. Si annoieranno e rivolgeranno la loro attenzione altrove, e avrai un paio di ore di pausa prima che un altro cattivo si accorga della porta aperta.

Ma tu dici che il problema scompare non appena esci da Terminal, che sembra un problema diverso. A MENO CHE tu abbia qualche watchdog sul tuo sistema che apra automaticamente la porta 22 (cioè, abilita il Login Remoto) solo mentre il Terminale è in esecuzione, e lo chiude automaticamente quando il Terminatore si chiude. O immagino che potrebbe essere possibile configurare un firewall in modo che consenta connessioni in ingresso alla porta 22 solo mentre esiste attualmente una connessione in uscita alla porta 22. O solo da indirizzi remoti a cui si ha una connessione in uscita, e il server si ' la connessione a è infetto. Chiudere il terminale chiude tutte le tue sessioni ssh, il che renderebbe il firewall smettere di accettare sessioni in ingresso ssh, interrompendo l'attacco. Solo una supposizione.

Per vedere se sei sotto questo tipo di attacco, apri Activity Monitor e filtra la lista dei processi per "sshd". Se vedi molti processi sshd di durata molto breve, qualcuno sta cercando di indovinare la tua password. Anche se non si consente l'accesso tramite password, non lo sanno e proveranno comunque.

    
risposta data 25.12.2014 - 04:46
fonte
0

La mia ipotesi sarebbe che hai un buffer di scorrimento molto, molto grande attivo e che occupa la tua memoria.

Vedi se

aiuta(deveessereapplicatoseparatamenteinognifinestra).Ilvalorepredefinitoperquestoè"memoria disponibile". Puoi invece cambiarlo nelle impostazioni con un numero adeguato di linee.

    
risposta data 27.02.2016 - 11:01
fonte

Leggi altre domande sui tag