가출 처리


116

때때로 distnoted프로세스가 갑자기 터져서 100 % CPU (하나의 코어에서)와 1 톤의 메모리 (주로 1.5G 정도 부근)가 씹히는 것을 볼 수 있습니다. 이것은 한 달 정도 전에 하루에 몇 번 발생합니다.

커맨드 라인은 /usr/sbin/distnoted agent이고 시작 launchd은하는데 도움이되지 않습니다. 일반적으로 CPU가 작동하기 전에 4 시간에서 24 시간 사이에 실행됩니다.

웹 검색에 따르면 distnoted알림 전달을 관리 한다고 말하고 다른 많은 사람들이 동일한 문제를보고하지만 아직 해결책을 찾지 못했습니다. 일부 사람들은 범인 응용 프로그램 (예 : Skype)을 닫으면 응용 프로그램이 중지되지만 아직 내 컴퓨터에서 범인을 찾지 못했습니다. 나는 보통 Emacs (Homebrew의 24.2), Firefox, Adium 및 Dash와 같은 몇 가지 응용 프로그램 만 실행하고 있습니다.

2012 년 말 13 "Retina MBP에 매버릭스에 있습니다. 미리 감사드립니다!

최신 정보:

distnoted을 터치하여 시스템 로그 에 로깅을 설정 /var/log/do_dnserver_log했지만 도움이되지 않습니다. 다음과 같은 줄이 표시됩니다 (uid 501은 나, 89는 아직 찾지 못했습니다).

distnoted[80011]: # distnote server agent  absolute time: 48754.144787848   civil time: Wed Nov 20 10:52:03 2013   pid: 80011 uid: 501  root: no
distnoted[20]: # distnote server daemon  absolute time: 2.808112262   civil time: Tue Nov 19 09:52:24 2013   pid: 20 uid: 0  root: yes
distnoted[444]: # distnote server agent  absolute time: 16.656997509   civil time: Tue Nov 19 09:52:38 2013   pid: 444 uid: 501  root: no
distnoted[1271]: # distnote server agent  absolute time: 52.518265717   civil time: Tue Nov 19 09:53:14 2013   pid: 1271 uid: 89  root: no
distnoted[689]: Interruption - exiting now.

나는 또한 sudo dtruss -p PID스핀 업 distnoted프로세스를 실행 했으며 다음 과 같이 줄을 뿜어 냅니다 .

kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
__disable_threadsignal(0x1, 0x0, 0x0)    = 0 0
__disable_threadsignal(0x1, 0x0, 0x0)    = 0 0
__disable_threadsignal(0x1, 0x0, 0x0)    = 0 0
kevent64(0x3, 0x7FFF7C3FD130, 0x1)       = 1 0
workq_kernreturn(0x20, 0x0, 0x1)         = 0 0
...

그냥 여기서 낚시를하되, 어떤 변화에 의해서도 당신은 모두 흐름을 달리고 있습니까? 나를 위해, 그들은 관련이있는 것 같습니다. emacs가 열광 할 때 플럭스를 종료하면 emacs가 충돌하거나 정상으로 돌아옵니다. 이것이 두 번 발생했는지 확실하지 않지만 모든 사람이 실행하면 무언가가있을 수 있습니다.

나는 플럭스를 실행하지 않지만 다른 사람들은 있습니다.
ryan

aquaemacs는이 과정이 저에게 튀어 나오게합니다.
마라톤

나는 매우 비슷한 문제 (아마도 같은 문제)가 있었고 내 문제는 10.9.4 OS 업데이트로 사라졌습니다.
Chris Quenelle

오늘 이것에 주목했습니다. 범인은 OS X (10.9) Google 드라이브 앱 (1.17.7290.4094)이었습니다. 나는 이것을 처음 보았다.
jordanpg

답변:


24

OP의 요약 : 이것은 디버깅을위한 훌륭한 도구였습니다. 원래 파일 시스템의 색인을 다시 생성하는 Spotlight를 지적했지만 색인을 생성 할 수있는 범위를 좁혔지만 여전히 문제가 있습니다. 나는 정기적으로 혐오감을 없애기 위해 크론 작업을 시작했습니다. 더 아래의 답변을 참조하십시오.


파일을 작성하여 구별하여 디버그 할 수 있습니다. /var/log/do_dnserver_log 이렇게하면 CFNotificationCenter서버 ( distnoted)가 모든 알림에 대한 정보를 시스템 로그에 기록합니다.

CPU를 시작하면 재부팅하고 시스템 로그를 살펴 봅니다. 이것은 범인을 쉽게 제거해야합니다.

CFNotificationCenter디버깅에 대한 자세한 정보 는 공식 개발자 문서에서 확인할 수 있습니다. 기술 노트 TN2124> CFNotificationCenter


감사! 좋은 전화, 나는 지금 그 일을했습니다. 에 구분되지 않은 항목 /var/log/system.log이 표시되지 않지만 로깅을 시작한 이후에도 회전하지 않았습니다. 손가락이 넘어졌다.
ryan

구분 된 로그 라인이 표시되지만 너무 유용하지 않습니다. 한숨. 예 :Nov 23 07:56:15 hell.local distnoted[2644]: # distnote server agent absolute time: 77.445654904 civil time: Sat Nov 23 07:56:15 2013 pid: 2644 uid: 89 root: no
ryan

DTrace 스크립트를 해당 프로세스에 연결하고 실제로 수행하는 작업을 확인 sudo dtruss -p PID하고 프로세스가 실제로 수행하려는 syscalls 시작 및 실패한 작업이 있는지 확인하십시오 (상태가 0이 아님).
Temikus

또한 시스템의 UID 89는 무엇입니까? 알림의 UID가 변경됩니까? pid 2644는 구별되거나 다른 프로세스에 해당합니까?
Temikus

아이디어 주셔서 감사합니다! 에 익숙 strace하지만에 대해 몰랐습니다 dtruss. 나는 다음에 확실히 시도 할 것입니다. pids는 해당하는 구별 된 프로세스이며 유일한 uids는 나이며 _appserveradm, 잘 모르는 내장 시스템 사용자입니다.
ryan

33

나도 이것을 보았다. 이맥스 24.3.1, 매버릭스 10.9.

나는 Emacs를 종료 한 후 몇 초 안에 무시 된 프로세스가 진정되는 것을 발견했다.

여기에 Emacs 버그를 제기했습니다 : http://permalink.gmane.org/gmane.emacs.bugs/80836


2
Emacs v23.4.1에서도 볼 수 있습니다.
WilliamKF

1
여기도 마찬가지입니다. 그것이 Emacs에 의한 것이라고 상상하지 마십시오! 감사합니다
Lionel Henry

1
나를 위해, 나는 대화 문제를 겪고있다-Emacs는 모든 CPU를 사용하기 시작하고, 사용자의 distnoted를 죽이면 일시적으로 문제가 해결됩니다. 이 경우 Emacs 프로세스를 살펴보면 com.apple.root.default-overcommit-priority queue / mutex (대 기행 lldb, "process attach --pid <pid> "다음에"모든 스레드 역 추적 ")
jrg

이것은 모든 스레드가 실제로 무엇에 흥미있는 읽기입니다 : newosxbook.com/articles/GCD.html (내 살인이 다시 정상으로 그것을 가져 오는 '마법의 깃털'이 아닌 일이 될 수도 distnoted)
JRG

OS X 10.11.3의 Emacs v24.5에서도 볼 수 있음
Michael

23

나는 파티에 늦었다는 것을 알고 있지만 이것은 트렁크에 고정 된 매버릭스의 Cocoa emacs에 특정한 메모리 누수입니다. 지금은 수정 사항만으로 emacs 24.3을 빌드하는 데 사용할 수있는 패치가 있습니다.

https://gist.github.com/anonymous/8553178



1
Mac OS X 용 Emacs (3 월)에서 야간 빌드로 업데이트했지만 여전히 문제가 있습니다. R 또는 Clojure (프로그래밍 언어)에 대한 대화 형 세션을 만들면 발생하는 것으로 보입니다. 무시한 프로세스는 천천히 GB의 RAM으로 올라가고 Emacs를 종료하자마자 해제합니다.
mattrepl

@mattrepl이 언급 한 것과 동일한 문제.
Amelio Vazquez-Reina

1
Homebrew는이 패치를 통합 한 것으로 보입니다. 따라서 brew reinstall emacs --cocoa --with-gnutls문제를 해결할 수도 있습니다. 또한 24.4에서 수정되어야하지만 아직 안정되지 않았습니다.
mblakele

이맥스 24.5에서이 문제가 발생했습니다 (수정은 24.4에 있어야 함) .. 내 경우에는 이맥스는 회전하는 공을 보이고 있었고, (400 top) CPU를 거의 400 % 차지하고 -9 이맥을 죽이는 것은 작동하지 않지만 살해 후 -HUP 표시되지 않은 emacs가 살해에 응답했습니다.
Michael

17

나는 distnoted엘 캐피 탄에서 한동안 같은 문제를 겪었 습니다. 내 솔루션은 정기적으로 죽이는 것만 큼 가혹하지 않고 오히려 제어가 부족한지 확인하고 (CPU 사용량이 많은) 확인합니다. 이 스크립트를 사용합니다 :

#!/bin/sh
#
# check for runaway distnoted, kill if necessary
#
PATH=/bin:/usr/bin
export PATH

ps -reo '%cpu,uid,pid,command' | 
    awk -v UID=$UID '
    /distnoted agent$/ && $1 > 100.0 && $2 == UID { 
        system("kill -9 " $3) 
    }
    '

스크립트는 crontab의 다음 줄과 함께 매분마다 cron에서 실행됩니다.

*   *  *   *  *   sh "$HOME/bin/checkdistnoted"

실제로 스크립트 distnoted는 하루에 한두 번 죽이고 일반적으로 backupd시작 후 발생 합니다.

OS X 쉘 (명령 행) 사용에 익숙하지 않은 사용자를 위해 다음 스크립트는 checkdistnoted스크립트와 crontab 항목을 모두 설치합니다 .

#!/bin/sh
#
# install $HOME/bin/checkdistnoted
# setup crontab to run every minute
# 
# MWR Apr 2016
#

INSTALLCMD=bin/checkdistnoted
cd "$HOME"
[ ! -d bin ] && mkdir bin
[ -f $INSTALLCMD ] || {
    cat > $INSTALLCMD <<-"!!"
    #!/bin/sh
    #
    # check for runaway distnoted, kill if necessary
    #

    PATH=/bin:/usr/bin
    export PATH

    ps -reo '%cpu,uid,pid,command' | 
        awk -v UID=$UID '
        /distnoted agent$/ && $1 >= 100.0 && $2 == UID { 
            # kill distnoted agent with >= 100% CPU and owned by me
            system("kill -9 " $3) 
        }
        '
!!
    chmod +x $INSTALLCMD 
    echo installed $INSTALLCMD
}

INSTALLCRON="# check for runaway distnoted every minute:
* * * * * sh \"\$HOME/$INSTALLCMD\""
crontab -l | grep -q '$HOME'/$INSTALLCMD || {
    crontab -l > mycron
    echo "$INSTALLCRON" >> mycron
    crontab mycron
    rm mycron
    echo updated crontab
}

위와 같이 install_checkdistnoted.sh데스크탑에 저장 한 후 다음을 실행 Applications/Utilities/Terminal하고 입력하십시오.

cd Desktop
sh install_checkdistnoted.sh 

제대로 작동하면 각 단계의 확인을 인쇄합니다. 스크립트는 기존 checkdistnoted스크립트 또는 crontab 항목을 덮어 쓰지 않습니다 .


2
감사합니다! 무시할 수는 있지만 제어 할 수 없을 때 종료되는 훌륭한 솔루션입니다. 나와 같은 다른 사람들에게 유닉스 방식으로 익숙하지 않을 수도 있습니다 : 1). 홈 폴더에는 bin 디렉토리가없고, 사용자 이름 아래에 bin 폴더를 만들고, "checkdisnoted"라는 텍스트 파일로 스크립트를 넣습니다. 2). cron 항목을 작성하려면 터미널에서 "crontab -e"를 실행하고 "i"키를 눌러 삽입 모드로 들어가서 전체 행을 별표로 붙여 넣은 다음 "esc"를 눌러 명령 모드로 돌아가서 입력하십시오. 파일을 저장하고 편집기를 종료하려면 ": wq"
mike

@Michael Rourke : 이것은 훌륭한 솔루션입니다. 그러나 설치 스크립트에는 Mac의 내장 bash "GNU bash, 버전 3.2.57 (1)-릴리스 (x86_64-apple-darwin15)"에 구문 오류가 포함되어 있습니다. "||" 논리 단축키와 "<<-"는 여기서 작동하지 않는 것 같습니다.
kakyo

@kakyo-탭이 공백이되어 스크립트가 실패했습니다. 이제 수정되었습니다.
마이클 루크

8

나는 포기하고 쇠 망치 접근을했다 : 매분마다 자동으로 죽여라. 한숨.

나는 이것을 넣었다 ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist:

<plist version="1.0">
<dict>
  <key>Label</key>
  <string>org.snarfed.pkill_distnoted</string>
  <key>ProgramArguments</key>
  <array>
    <string>pkill</string>
    <string>-KILL</string>
    <string>-f</string>
    <string>distnoted</string>
  </array>
  <key>StartInterval</key>
  <integer>60</integer>  <!-- every minute -->
</dict>
</plist>

그런 다음로 설치하십시오 launchctl load ~/Library/LaunchAgents/org.snarfed.pkill_distnoted.plist.


1
아래의 Michael Rourke의 접근 방식은 터치 클리너입니다. CPU를 먹기 시작할 때 무시 당하기 만합니다.
mike

@ mike이지만 Michael Rourke 접근법은 disnotedRAM을 먹는 경우를 다루지 않습니다 .
Cœur

@ Cœur-예. 램을 먹는 데 문제가 없었습니다. 그게 당신이 본 문제입니까?
마이크

1
@mike 네, disnoted어제 High Sierra에서 63GB 의 RAM을 먹었습니다. 그의 질문에 따르면 라이언조차도 그 과정이 많은 기억을 씹고 있다고 말합니다 .
Cœur

@ Cœur-좋은 지적입니다! 나는 그들을 upvoted.
마이크

4

이 동작의 범위를 좁히기 위해 다양한 스트리핑 사용자 정의 조합을 사용하고 있습니다. 나는 그것이 comint 모드라고 생각한다. 10.9에서 homebrew (또는 emacsforosx)의 emacs 24.3.1을 사용하면 하나의 쉘 모드 버퍼를 열면 구분 된 + emacs 누출 (둘 다 메모리 소비가 천천히 증가 함)이 발생합니다. 파일 만 방문해도 안됩니다.

gmane이 다운 된 것으로 보이며 매주 두 번이 문제에 대한 후속 조치를 검색 할 때이 토론을 계속 찾고 있습니다.


감사! 나는 실제로 같은 것을보고있을 수 있습니다. 나는 중성 스포트라이트 (허용 된 답변)가 나를 위해 일했다고 생각했지만 여전히 도망가는 것을보고 있습니다. 리드에 다시 한번 감사드립니다, 나는 이것을 따라 더 디버깅 할 수 있습니다.
ryan

나는 그것이 나의 Emacs 프로세스를 다루는 무언가라고 생각합니다. 내가 이맥스를 죽인 직후에 진정되었다. server.el, edit-server.el 및 파이썬 쉘이 레코드를 위해 항상 실행 중입니다.
Lester Cheung

같은 것을보고! 이맥스가 비난을 받는다!
justingordon

나는 comint 모드가 무엇인지 모르고 때로는 emacs에서 명백한 문제가 있습니다. 따라서 특정 패키지가 책임을지지 않습니다.
huyz

2

나는 distnoteded가 haywire로 갔을 때 두 번만 기억할 수 있다고 생각합니다. 이 경우 CPU 목록 상단에 2 개가 있고 400 % 이상이있었습니다. 사무실로 돌아와 몇 개의 외부 디스플레이를 꽂은 직후에 발생했습니다.이 중 하나는 USB 전원이 공급됩니다. 관련이 있다고 생각했습니다. USB 디스플레이를 꺼내기 전에 문제를 해결하기 위해 다른 조치를 취하지 않았기 때문에 즉시 정신이 회복되었습니다. 그런 다음 다시 연결하면 반복 문제가 발생하지 않았습니다.

어느 것이 무엇을 증명합니까? 몰라!

나는 그것들을 수백 번 연결하고 이것이 관련되었을 수도있는 것은 나에게 처음이다. 그리고 플러그를 꽂을 때마다 발생하지 않기 때문에 서로 너무 빨리 연결하거나 무작위로 연결하는 것과 관련이 있습니다. 어쨌든 다른 사람들이 주변 장치를 연결하는 것과 관련이 있다고 생각하면 공유 할 것이라고 생각했습니다 (외부 화면이있는 경우)


나는 비슷한 상황을 겪었다. USB 디스플레이 어댑터의 플러그를 뽑았을 때 과도한 CPU 소비 ( "맨 위"에 따라)가 중단되고 다시 연결했을 때 문제가 즉시 다시 나타나지 않았습니다.
Dalbergia

이것은 나에게도 문제가되었다. 감사합니다!
Eric Simonton

2

응용 프로그램이 어떻게 든 macOS에서 제공하는 알림 API를 잘못 사용하는 경우에 발생합니다. 제 경우에는 범인은 iTerm2였습니다. 종료 한 후 distnoted프로세스가 종료되었습니다. 확인 된 다른 범인은 Emacs와 iTunes입니다.


1
iTerm2도 나를 위해 그것을 유발합니다.
ctc

0

그만한 가치가 있기 때문에 안티 바이러스 소프트웨어를 비활성화하여이 문제를 해결할 수있었습니다.


0

이것은 나에게도 일어났다. 많은 응용 프로그램을 닫은 후에도 아무런 도움이되지 않았습니다.

그런 다음 충돌 한 Python 프로세스의 'App to Apple 보고서'대화 상자 중 하나가 밤새 열려있는 것으로 나타났습니다.

우연의 일치 일 수도 있지만, 대화 상자를 닫은 후 뚜렷한 프로세스가 진정되었습니다.


0

몇 개월 전에 비슷한 문제가 발생하여 CPU 사용량이 100 % 이상으로 급상승 한 이유를 추적 할 수 없었습니다. 마지막으로 killall distnoted2 분마다 crontab에 항목을 추가하여 문제를 해결했습니다.

최근, subl path/to/fileSublime Editor 에서 입력 이 파일을 올바르게 열지 못하는 Sublime Text에 문제가 있습니다. 앱을 다시 시작하면 문제가 해결되었지만 빠르게 다시 발생하기 시작했습니다.

내 두뇌를 끝없이 쌓고 난 후, 나는 subl 명령이 신비하게 작동을 멈추는 이유에 대해 2 분마다 뚜렷한 프로세스를 죽이고 있다는 사실을 확인했습니다.

결론 : 매우 높은 CPU 사용량은 숭고한 것과 관련이있을 수 있습니다. 이제 숭고한 내용이 업데이트되었으므로 내 결론이 정확하고 CPU 사용량이 낮으며 crontab이 2 분마다 프로세스를 종료하지 않고 distnoted가 다시 실행되므로 subl 명령이 예상대로 작동합니다.


0

지금도 꽤 오랫동안이 문제가 있었지만 간헐적으로 말입니다. 분명히 distnoted는 iTunes의 일부이며 Windows에서도 문제를 일으켰습니다 . 노래를 재생하는 iTunes를 죽였을 때 distontedCPU의 400 % (4 개의 코어가 있음)를 사용 하는 프로세스에서 문제가 발생하지 않았습니다.

따라서 제 대답은 내가 더 잘 알 때까지 iTunes를 죽이지 distnoted말고 어떤 일이 발생했는지 알려주는 것입니다.


-1

나는 또한 쇠목이없는 건초를 보았습니다. 제 경우에는 글꼴과 관련이있는 것 같습니다. 하나는 _spotlight, 하나는 _distnote, 다른 하나는 내 사용자를위한 세 개의 구분 된 실행입니다.

distnoted   0,0 6:39,85 2   0   101 _distnote   0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit
distnoted   0,0 0,05    2   0   642 _spotlight  0 bytes 0 bytes     Yes     -   No  No  No  0 bytes 0 bytes 64 bit
distnoted   82,1    1:19:38,30  49  1   353 nils    0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit

distnoted가 cpu (30-90 %)를 먹을 때마다 fontworker와 fontd는 각각 약 30-60 % cpu를 먹습니다. 사용자를위한 글꼴, 무시 및 글꼴 작업을 중단하자마자 진정합니다. fontworker를 죽이면 아무 일도하지 않습니다. fontd가 다시 시작되고 잠시 동안 실행 된 몇 분 후 모두 다시 시작됩니다.

fontworker  27,2    52,81   4   1   1073    nils    0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit
fontd   32,6    1:07,41 6   0   1072    nils    0 bytes 0 bytes     No      -   No  No  No  0 bytes 0 bytes 64 bit

왜 이런 일이 일어나고 있는지 전혀 모른다.


-2

피터 버클리 말이 맞아, 내가 틀렸어 그럴 때 나는 그것을 싫어.

무시한 부분을 제거하지 마십시오. 다음 부팅은 전혀 재미가 없습니다.

잘못된> 나는 더 망치로 접근했다
잘못> 
잘못된> sudo mv / usr / sbin / distnoted /usr/bin/distnoted.unwanted
잘못>
wrong> 이것은 작업용 컴퓨터이며 iTunes와 동기화에 관심이 없습니다.


그건 견과류 야 distnoted대한 Apple의 페이지 에서 언급 한 것처럼 distnoted는 OS X의 일부이며, 분산 알림을 다루며, 적어도 2005 년 이래로 주변에 있습니다.
jfmercer

당신이 무엇을하든 distnotedConorR이 언급 한대로 움직이지 마십시오 (그리고 나중에 고마워요!), OSX (필자의 경우 10.9.5)를 부팅해야합니다.
Peter Buckley

이것이 실제로 답이 아닌 한, 이것이 페이지의 어딘가에 남아있는 것이 중요하다고 생각합니다. 나는 거의 무시하려고 노력하는 것을 고려했다.
Zenexer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.