Solaris 8에서 출력이 느림

Solaris 8에서 출력이 느림

저는 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 레이블이 있는 영역을 실행합니다.

브랜드 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 하이퍼바이저에서 실행한 다음 각 전역 영역에서 실행합니다.

관련 정보