저는 Solaris 전문가가 아니며 Windows 운영 체제에 익숙합니다. 어쨌든, 무슨 일이 일어나고 있는지 파악하는 데 어려움을 겪고 있지만 답을 찾을 수 없습니다.
우리는 Solaris 10을 실행하는 3개의 LDOM과 함께 Solaris 11을 실행하는 물리적 서버를 보유하고 있습니다. 각 LDOM에는 하나의 영역이 있습니다(구성이 전혀 없는 전역 영역 제외). 영역은 Solaris 8입니다(이 영역에서 실행되는 응용 프로그램은 8보다 높은 Solaris 버전을 지원하지 않기 때문입니다).
이제 데이터베이스가 하나의 디스크에 있고 소프트웨어 및 기타 항목이 다른 디스크에 있는 영역에 문제가 있습니다. 사용자들은 느린 서버 속도에 대해 불평했습니다.
top과 iostat를 사용하여 상태를 확인하면 다음과 같습니다.
load averages: 1.82, 1.74, 2.71 09:45:06
1047 processes:1040 sleeping, 2 zombie, 2 stopped, 3 on cpu
CPU states: 85.0% idle, 11.5% user, 3.5% kernel, 0.0% iowait, 0.0% swap
Memory: 56G real, 12G free, 25G swap in use, 8798M swap free
최대 하중 값은
5.xx 6.xx
CPU States: 40% idle,
Memory: 4G free
iostat 결과에 따르면
root # iostat -xtc
extended device statistics tty cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id
vdc0 0.3 1.0 4.4 14.2 0.0 0.0 33.1 0 0 2 112 141 172 0 162
vdc1 40.9 3.6 667.9 78.7 0.0 0.2 3.4 0 8
vdc2 2.0 1.0 127.1 5.1 0.0 0.0 2.7 0 0
vdc3 0.0 3.8 0.0 90.9 0.0 0.0 3.8 0 1
vdc4 62.6 31.5 17615.7 1232.5 0.0 7.4 78.9 1 82
vdc5 12.5 7.9 281.2 421.3 0.0 0.1 7.2 0 4
vdc6 0.0 0.0 0.0 0.0 0.0 0.0 2.8 0 0
vdc7 0.0 7.3 0.0 451.0 0.0 0.0 2.1 0 1
vdc8 40.6 3.6 667.9 78.8 0.0 0.1 3.3 0 8
DB가 위치한 디스크 4(vdc4)는 항상 높은 %b 비율을 가지며 항상 최소 1개의 프로세스 대기(%w)가 있습니다. 보기에는 좋지 않지만 150명이 넘는 사용자가 액세스하고 있다고 생각합니다. 괜찮아. 내가 틀렸다면 정정해주세요.
이제 사용자가 언제든지 이상하게도 루트는 불평하는 동안 잘 작동합니다. 서버 리소스가 부족하든 높든 상관없이 항상 동일한 문제가 발생합니다.
사용자의 유일한 프로세스인 실행 중인 프로그램을 확인합니다.
# ps -fu user
UID PID PPID C STIME TTY TIME CMD
user 6027 6024 0 08:13:14 pts/15 0:00 -ksh
user 186 181 0 09:40:48 pts/4 0:00 -ksh
user 555 15455 0 09:42:52 ? 0:00 in.ftpd
user 14114 14104 0 08:42:06 pts/7 0:00 -ksh
user 24325 14114 0 09:15:28 pts/7 0:00 tail -f XXXXXXXX
user 26 15119 0 May 30 ? 0:35 ./oplinkse_SGCR6
user 8412 15119 0 01:59:24 ? 0:01 XXXXXXXXXXXXXXXXXXXX
user 27 26 0 May 30 ? 7:00 ./oplinkse_SGCR6
user 1504 6027 0 09:46:24 pts/15 0:00 tail -f XXXXXXXX
user 5818 5815 0 08:12:39 pts/14 0:00 -ksh
그들은 단지 일부 파일을 보고 2개의 openlink 세션을 통해 데이터베이스에 연결합니다. 아무것도 실행하지 않고 단지 ls -l
3개의 파일이 있는 디렉터리를 원하더라도 시간이 오래 걸립니다(때로는 1분까지).
문제를 찾기 위해 무엇을 확인할 수 있나요?
인터넷을 둘러보았지만 내가 찾은 것은 SSH를 통한 사용자의 느린 로그인 프롬프트에 관한 것입니다. 이는 로그인 프롬프트가 즉시 표시되지만 로그인한 후 명령을 수행하면 거기에 머무르기 때문에 여기서 일어나는 일이 아닙니다. 장기.
답변1
먼저, 이를 확장할 수 있습니다: "사용자가 서버가 느리다고 불평하고 있습니다." 일부 표현은 네트워크 대기 시간을 의미하고 일부는 애플리케이션 속도 저하를 의미합니다.
LDOM(현재 Oracle VM for SPARC)을 사용하고 있으므로 SPARC 서버를 사용해야 합니다. 하드웨어 v11 및 LDOM 버전도 유용합니다. 또한 각 LDOM에 대한 구성을 제공해야 합니다. 어쩌면 구성 문제일까요?
또한 (1) Solaris 10 LDOM(v10을 실행할 수 없을 것 같습니다) 및 (3) v11 시스템에서 Solaris 8 태그 영역을 사용하여 더 나은 성능을 얻을 수 있는지 궁금합니다. 현재 (3) ldom 구성과 비교해 보십시오. 각각은 (1) Solaris 8 레이블이 있는 영역을 실행합니다.
답변2
이것은 실제로 답변은 아니지만 이에 대한 의견은 작동하지 않습니다. 이는 답변을 얻는 데 도움이 될 수 있는 문제 해결 도구입니다.
이 DTrace 스크립트는 시스템 커널이 시간을 소비하는 위치를 잘 보여줍니다.
#!/usr/sbin/dtrace -s
#pragma D option quiet
profile:::profile-1001hz
/ arg0 /
{
@hot[ arg0 ] = count();
}
dtrace:::END
{
printa( "%@u %a\n", @hot );
}
이는 모든 커널 스레드의 현재 기능에 대한 많은 샘플을 캡처하므로 시스템이 소규모 작업 세트를 수행하는 데 많은 시간을 소비하는 경우 이 작은 스크립트가 이를 신속하게 드러낼 것입니다.
실제 커널 스택을 보려면 다음을 사용할 수 있습니다.
#!/usr/sbin/dtrace -s
#pragma D option quiet
profile:::profile-1001hz
/ arg0 /
{
@hot[ stack() ] = count();
}
dtrace:::END
{
printa( "%@u %a\n", @hot );
}
예를 들어 파일에 저장하고 파일을 실행 가능하게 만든 다음 다음 hot.d
과 같은 명령을 사용하여 chmod 755 hot.d
루트로 실행합니다 ./hot.d
. 어떠한 출력도 방출하지 않습니다. 잠시 동안(예: 30초 정도) 실행해 보세요. 그런 다음 CTRL-C
중지를 클릭합니다. 그런 다음 특정 스택 추적이 관찰된 횟수의 오름차순으로 런타임에 발견된 모든 샘플링된 커널 현재 함수 또는 스택 추적을 내보냅니다.
출력의 마지막 몇 가지 함수 또는 스택 추적을 통해 시스템이 대부분의 시간 동안 수행하는 작업이 드러날 수 있습니다.
예를 들어, 커널이 조각난 메모리 페이지를 Oracle 데이터베이스에 필요한 거대한 페이지로 병합하는 등의 작업을 수행하는 데 대부분의 시간을 소비한다면 즉시 이를 확인할 수 있습니다.
Solaris 11 하이퍼바이저에서 실행한 다음 각 전역 영역에서 실행합니다.