가출 처리 응용 프로그램

때때로 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
...


답변

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


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

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

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


답변

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

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

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


답변

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

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



답변

나는 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 항목을 덮어 쓰지 않습니다 .


답변

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

나는 이것을 넣었다 ~/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.


답변

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

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


답변

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

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

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