많은 수의 apt-check 실행을 방지하는 방법은 무엇입니까?


18

매우 명확한 원인으로 인해 우분투 12.04 서버가 충돌했습니다. apt-check모든 메모리를 소비하는 30 개 이상의 프로세스, OOM 킬러가 시작되고 중요한 서비스가 종료됩니다. apt-check프로세스가 어디에서 왔는지 확실하지 않지만 Nagios / Icinga 플러그인에서 check_apt이를 사용할 수도 있고 byobu상태 표시 줄에 출력을 표시하려고 할 수도 있습니다. 무언가가 잠겨 있고 모든 프로세스가 대기 중이지만 메모리를 보유하고 있다고 생각합니다.

apt-check시스템에 인스턴스가 너무 많은 것을 방지하려면 어떻게해야 합니까? 그것은 나에게 이해가되지 않으며 dpkg 데이터베이스에 대한 읽기 잠금을 얻을 수없는 즉시 종료해야합니다.

내가 여기서 곤경에 처한 유일한 사람은 아닌 것 같습니다. 에 대한 모든 제안 apt-check은 매우 부정적입니다.

여기에 이미지 설명을 입력하십시오

(깨끗한 브라우저, 로그인하지 않았으며 맞춤 검색이 없음)

답변:


8

어떤 사람들 apt-check은 나 에게이 수정 사항이 필요한 매우 무딘 스크립트라는 힌트 를 주었습니다. 저자와 관련하여 내 서버에서 실패하고 있습니다. 내 생각은 다음과 같습니다.

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • nicelevel 19를 강제로 실행
  • 동작에 시간 초과가 설정되지 않았습니다

마지막 두 가지를 조합하면 나선형으로 끝없이 쌓일 수 있습니다. 시스템이 우선 순위가 높은 다른 목적으로 사용되는 경우 프로세스의 양이 증가하고 그에 apt-check대한 우선 순위는 절대로 가지 않으므로 종료 되지 않습니다. OOM 킬러가 중요한 시스템 프로세스를 종료하기로 결정한 경우에만 문제가 악화됩니다.

행동에서이 두 측면 중 하나가 다른 경우, 시스템이 그러한 고장난 상태로 끝나는 것을 허용하지 않을 것입니다.

문자열이 이것에 책임이있는 부모 프로세스에 관한 것이지만 , 아래 사항에 결함이 apt-check있으며 올바르게 해결하기 위해 버그로보고해야 한다고 생각합니다 .

  • OOM 킬러 가 먼저 죽임을 암시 해야 합니다.
  • nicelevel을 하드 코딩하지 않아야합니다.
  • 정보를 얻는 데 무리한 시간이 걸리면 종료해야합니다.

실제로 Linux OOM 킬러는 휴리스틱을 수행하는 것으로 보입니다. 멋진 프로세스는 점수를 높이고 장기 실행 프로세스는 줄어 듭니다. ( 출처 -Ulrich Dangel 에게 지적 해 주셔서 감사합니다 )

가능한 해결책은 다음과 같습니다.

  • 처리 후 캐시 결과
  • 모든 간단한 (짝수 ) 호출에 대해 모든 Python-APT 라이브러리를로드하지 않고 N 초 미만의 경우 출력 캐시 .--help
  • nicelevel을 구성 가능하게 만드십시오- 이것을 변경 / 비활성화 할 수있게하십시오! 나는 그것을 0으로 설정하면 실제로 도움이 될 것이라고 믿습니다.
  • OOM 킬러 점수를 올리십시오

가장 큰 일을 놓친 것 같습니다. 잠금 파일을 사용하고 둘 이상의 인스턴스가 한 번에 실행되지 않도록하십시오.
derobert

@derobert 모든 사용자가 데몬이 아닌 우분투에 대한 특정 권한없이 실행할 수있는 스크립트입니다. 아니면 내가 사용할 수 있습니다 /var/run/ /tmp안전이 세상 읽을 수있는 / 쓰기 잠금 파일을? 큰 구멍 : 잠금 파일 추가 및 관리자에게 시스템 업데이트 알림이 표시되지 않습니다!
gertvdijk

자동으로 시작하는 것이 무엇이든 (30 회 이상 실행 중) 잠금을 수행해야합니다. 또는 사용자별로 할 수도 있습니다. 어느 쪽이든, 그것은 해결해야 할 버그입니다.
derobert

Nagios / Icinga는 함정을 피하는 것 같습니다. 적어도 10 초 정도의 타임 아웃이 있었으며 초과되면 경고했다. (시간 초과를 구성하는 방법을 찾을 수는 없지만 더 오래 선호합니다). 데비안의 Byobu는 저에게 문제를 일으켰습니다. 우분투에서는 고정되어 있어야합니다 .
sourcejedi

4

apt-check가 생성되는 프로세스를 찾아야합니다. ps와 같은 것을 사용하여 프로세스 트리를 얻을 수 있습니다.

ps -A --forest

apt-check에 부모가없는 경우 특정 프로그램이 아닌 자체 검사에 문제가있을 수 있습니다. 이 경우 apt-check를 디버깅하려고합니다.


감사. 좀 더 자세히 살펴볼 아이디어가 있습니다. 그러나 이로 인해 그것이 apt-check실제로 내 자신의 대답을 보는 문제라고 믿게되었습니다 .
gertvdijk

메모리와 CPU 시간을 소비하는 경우 좀비가 아닙니다.
Gilles 'SO- 악마 그만해'

@Gilles 좋은 지적.
문자열

0

우분투 12.04에 기초

나는 똑같은 문제가 있는데 그 이유는을 사용하지 않고 byobu실행하면 프로세스 가 없다는 것입니다. 또한, 제품에 관련 하여, 나는 (갱신 notifer - 일반, 갱신 통지) 패키지를 제거 할 때, 패키지 및 실행 , 그것은 또 다른 명령을 실행하지만, 꽤 같은 메모리 사용 : .apt-get updatebyobucheck-aptupdate-notifierbyobuapt-get updateapt-get -s -o Debug::NoLocking=true upgrade

다른 것들이 실행될 수 있습니다 apt-get update(그러나 아마도 실행되지는 않습니다 check-apt)

데스크탑에는 더 많은 것이 관련 될 수 있습니다.

결론 : 이러한 프로세스 byobu를 실행 apt-get update하고 트리거 할 때 이벤트를 포착하고 check-apt상태 표시 줄을 재구성 byobu하여이 문제를 해결하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.