"최대 클라이언트 수에 도달했습니다...디스플레이 ":0"을 열 수 없습니다" 디버깅 중

"최대 클라이언트 수에 도달했습니다...디스플레이 ":0"을 열 수 없습니다" 디버깅 중

저는 openSUSE Tumbleweed 설치를 실행하는 KDE Plasma 5.4.3을 사용하고 있습니다. 저는 꽤 많은 프로그램(Eclipse, Firefox, Slack, Evolution, Konsole, 다양한 Java 앱)을 사용하는 편인데 시간이 지나면 더 이상 새 프로그램을 열 수 없습니다.

Maximum number of clients reachedxlsclients:  unable to open display ":0"

어떤 프로그램이 오류를 일으키는지 확인할 수 없습니다. 작업시 xlsclients20~30개 정도의 프로그램이 표시되는데 , 정확한 정보가 표시되지 않는 것은 아닐까 의심됩니다.

이 문제를 디버깅하고 어떤 프로그램이 오류를 일으키는지 알아내려면 어떻게 해야 합니까?

답변1

xlsclients나에게 많은 것을 말하지 않았습니다 xrestop. 이 문제를 연구하는 사람들이 쓴 대부분의 기사는 다음을 찾는 데 중점을 둡니다.모두유닉스 소켓을 엽니다. 그러나 lsofc -c Xorg조언이 훨씬 좋습니다.

그러나 이제 ss해당 정보를 더 직접적으로 얻을 수 있습니다. 이 명령은 Xorg에 연결된 Unix(로컬) 소켓을 표시합니다.

sudo ss -x src "*/tmp/.X11-unix/*" 

사용자 환경에서 작동하도록 하려면 필터 섹션을 실험해야 할 수도 있습니다. 개별적으로 실험하여 sudo ss -x모든 것을 확인하고 거기에서 필터링해 보세요.

ss소스 애플리케이션을 식별하는 방법(예: 이 작업)을 찾을 수 없지만 lsofc일부 파이프를 사용하면 식별할 수 있습니다.

sudo ss -x src "*/tmp/.X11-unix/*" | grep -Eo "[0-9]+\s*$" | while read port
do sudo ss -p -x | grep -w $port | grep -v X11-unix 
done | grep -Eo '".+"' | sort | uniq -c | sort -rn

출력은 다음과 같습니다.

  8 "slack"
  8 "code"
  7 "brave"
  5 "kded5"
  2 "kwin_x11"
  2 "ksmserver"
  2 "kscreen_backend"
  1 "zoom"
  1 "zim"
  :

"최대 클라이언트 도달" 문제가 발생하는 동안 이 명령을 실행하면 이 검색에는 256개의 클라이언트 목록이 표시됩니다. 그래서 저는 이것이 범인을 찾는 데 적합한 도구라고 확신합니다.

ss다음 페이지에서 자세한 정보를 확인할 수 있습니다.

대략적인 스크립트 줄의 주석 처리된 버전은 다음과 같습니다.

sudo ss -x src "*/tmp/.X11-unix/*" |  # List X11 sessions
  grep -Eo "[0-9]+\s*$" |             # extract the port number
  while read port ; do                # For every connected port
    sudo ss -p -x | grep -w $port |   #   Find the connecting process
    grep -v X11-unix                  #   but ignore the x11 side
  done | grep -Eo '".+"' |            # extract process names
  sort | uniq -c |                    # Count the number of repeats
  sort -rn                            # And sort them descending by count

관련 정보