두 개의 동일한 Ubuntu 서버간에 성능에 큰 차이가있는 원인을 어떻게 찾을 수 있습니까?


9

데이터 센터의 동일한 랙 (로드 밸런서 뒤)에서 두 개의 Dell R410 서버를 실행 하고 있습니다. 둘 다 동일한 하드웨어 구성을 가지고 있으며 Ubuntu 10.4를 실행하고 동일한 패키지를 설치하고 동일한 Java 웹 서버를 실행합니다 (다른로드 없음).이 둘 사이에 상당한 성능 차이가 있습니다.

성능 차이는 두 서버의 평균 응답 시간에서 가장 분명합니다 (네트워크 대기 시간없이 Java 앱 자체에서 측정 됨).이 중 하나는 다른 서버보다 20-30 % 더 빠르며 매우 일관됩니다.
내가 사용 dstat이 컨텍스트 스위치, IO, 교환 또는 아무것도 더 많은,하지만 난 그 차이에 대한 이유가없는 경우 알아낼 수 있습니다. 동일한 워크로드 (스왑 없음, 사실상 IO 없음)로 CPU 사용량과로드가 한 서버에서 더 높습니다.

따라서 그 차이는 주로 CPU 바운드 인 것처럼 보이지만 sysbench(다른 모든 부하를 끈 상태에서) 간단한 CPU 벤치 마크 에서 차이가 발생했지만 6 %에 불과했습니다. 아마도 CPU 일뿐 만 아니라 메모리 성능 일 수도 있습니다.

지금까지 확인했습니다.

  • 모든 구성 요소의 펌웨어 개정판 (동일)
  • BIOS 설정 (을 사용하여 덤프를 dmidecode했는데 아무런 차이가 없었습니다)
  • 나는 비교했다 /proc/cpuinfo.
  • 나는 출력을 비교했다 cpufreq-info.
  • Java / JVM 매개 변수 (두 시스템에서 동일한 버전 및 매개 변수)

또한 몇 달 전에 RAM을 완전히 교체했지만 아무런 효과가 없었습니다.

나는 길을 잃었다. 알아 내기 위해 무엇을 할 수 있습니까?

업데이트 : 예! 두 서버 모두 현재 동일하게 수행됩니다. 주석에서 jim_m_somewhere로 이름이 "power CRAP"설정이었습니다. "전원 관리"의 BIOS 옵션은 빠른 서버의 "최대 성능"과 다른 서버의 "Active Power Controller"(Dell의 기본 설정)에있었습니다. 분명히 2 년 전에 설정 한 것을 잊어 버렸고 모든 서버에서 그렇게하지는 않았습니다. 매우 유용한 정보를 제공해 주셔서 감사합니다!


2
RAM에 결함이있을 수 있습니다. 응용 프로그램이 네트워크가 무거 우면 네트워크 스택을 따라 무엇이든 될 수 있습니다.
Kyle

2
BIOS에서 "고급 CPU 설정"을 비교할 수 있습니까? -ipmitool 명령을 실행하여 그렇게 할 수 있습니까? RAM의 속도가 동일합니까? 디스크 / 컨트롤러에 배터리 백업이 있는지 확인했다고 가정합니다. "큰 소리로"생각하면 ... 두 상자의 RAM이 동일합니까? 등록되었거나 등록되지 않았습니다 ... AH ... 두 서버에서 "power CRAP"-ACPI가 꺼져 있는지 확인 했습니까?
jim_m_somewhere

2
동일한 데이터를 제공하는 경우 fw 또는 dns에서 발생하는로드 밸런싱은 무엇입니까? 네트워크 통계는 어떻게 생겼습니까? Java 구성도 동일합니까? Java 힙 크기가 동일합니까? 이것에 어둠 속에서 촬영.
au_stan

2
소프트웨어 구성이 실제로 동일합니까? 예를 들어, AppArmor가 하나에서 활성화되고 다른 하나에서 비활성화됩니까? 또한 'dmesg'에 오류가 있는지 확인하십시오.
Anton Cohen

1
당신은 네트워크의 유선 케이블, 스위치의 포트 확인하고 또한 당신은 IOPS를 참조하거나 HDD ... 감사의 건강 체크

답변:


6

얼마나 멀리 갈 것인지에 따라 두 가지 아이디어가 있습니다.

  1. 두 서버의 디스크를 교환하고 하드웨어에서 속도 성능이 유지되는지 또는 소프트웨어와 함께 이동하는지 확인하십시오.

  2. /opt/dell/toolkit/bin/syscfg -o complete-bios-config.out어떻게 든이 패키지를 설치하도록 속일 수 있는지 의 출력을 비교하십시오 .


dstat의 출력은 IO가 발생하지 않을 때 성능의 차이도 발생한다는 것을 명확하게 보여주었습니다. Ubuntu 10.4에 syscfg를 설치하는 것은 실제로 까다로운 것 같습니다. dmidecode의 출력을 이미 비교했지만 sysctl이 더 표시됩니까? 어쩌면 각 BIOS 화면의 사진에 대한 작업이 적고 비교할 수 있습니다. 나는 이것을 시도 할 수 있습니다.
the.duckman

1
디스크를 교환함으로써 IO를 조사하는 것이 아니라 오히려 속도를 저하시키는 소프트웨어 (미스) 구성 (예 : 이상한 커널 매개 변수) 인 경우였습니다.
chutz December

3

더 많은 출력 및 차이 가능성 :

  • sysctl -a (커널 조정 가능 항목이 동일한 지 확인)
  • cat / proc / interrupts (어쩌면 다른 하드웨어 엉망이 있습니까?)
  • ipmitool 센서 목록 (긴 샷이지만 더 낮은 레벨 차이, 과열, 전압 문제 등 확인)

고맙게도 이러한 명령의 출력에 분명한 차이는 없습니다.
the.duckman

2
software를 사용하여 파일을 비교하면 모든 차이점이 분명 합니다 . 이 질문을 참조하십시오 : 두 개의 구성 파일을 어떻게 구별합니까?
Skyhawk

3

이것은 나와 관련된로드 밸런서 일 수 있습니다. "동일한 작업량"이라고 말할 때 어떻게 측정합니까?
테스트로드를 개별적으로 적용하여 각 서버를 직접 벤치마킹하고 있습니까?
또는로드 밸런서에로드를 적용하고 두 서버 모두에서 결과를보고 있습니까?

후자를 수행하는 경우 (로드 밸런서를 통해 두 서버에 배치 된로드 측정)로드 밸런서는 서버간에 작업 부하를 정확하게 균등하게 분할하지 않을 수 있습니다 (한 쌍의 서버에 대해 20 % 차이는 일반적이지 않습니다) 로드 밸런서는 누가 어떤 요청을 받는지 결정하여 서버 한 대가 더 많은 부하를 받아 성능이 저하되도록합니다.

(로드 밸런서를 중개자로 사용하지 않고 각 서버를 직접 벤치마킹하고 두 시스템간에 모든 구성 요소가 동일 (제조업체 개정판까지)인지 확인한 경우 손실이 발생합니다. 동일한 서버간에 이러한 종류의 성능 차이에 대한 다른 측정 가능한 이유는 생각할 수 없습니다.)


맞습니다.로드 밸런서도 그렇게합니다. 실제로는 기능입니다. 그래서 여러 가지 방법으로 측정했으며, 각 서버에서 동일한 요청을 개별적으로 한 번 "재생"하기까지했습니다. 그러나 모든 실시간 트래픽을 일정 시간 동안 단일 서버에두고 각 서버가 응답을 준비하는 데 필요한 시간을 비교하면 복잡한 설정과 동일한 결과를 얻을 수 있습니다.
the.duckman

흠-이 경우 공식적으로 난처 해졌습니다-모든 것이 실제로 동일하다면 (그리고 우리는 그것을 잘 확인한 것 같습니다) 성능 수치 (± 5-7 %)에서 합리적인 오차 한계 내에 있어야합니다- '보다 두 배 이상의 변화를보고있다, 나는 아무 생각이 왜 없어 한 : - /
voretaq7

3

perf 와 같은 시스템 프로파일 링 또는 VisualVM 과 같은 Java 프로파일 링과 같은 일부 프로파일 링 도구를 사용해보십시오 .

perf를 사용하면 PID로 실행중인 Java 프로세스를 프로파일 링하거나 벤치 마크를 프로파일 링 할 수 있습니다. 두 시스템을보고 느린 시스템이 시간을 소비하는 곳을보십시오.

apt-get install linux-tools-common linux-tools

그런 다음과 같은 것 :

perf record -e cpu-cycles -p <pid>

또는

perf record -a -g <benchmark command>

그때

perf report

시스템이 어떻게 다르게 수행 될 수 있는지에 대한 몇 가지 아이디어 :

환경 : 공기 온도 또는 기류가 다른가? 그들은 선반에 있습니까? 진동으로 인해 시스템이 다른 랙 위치에서 다르게 작동하는 것을 보았습니다. 랙마다 진동 수준이 다릅니다. I / O가 거의 사용되지 않는다고 말한 것 같습니다. 그러나 랙의 일부에서 진동으로 인해 디스크가 2MB / 초의 순차적 쓰기 속도로 느려지는 것을 보았습니다.

하드웨어 결함 : 모든 하드웨어에 결함이있을 수 있습니다. 프로파일 링을 사용하여 느린 것을 확인하십시오. CPU 또는 칩셋이 불량하거나 방열판이 올바르게 장착되지 않았으며, 균형 팬이 진동을 일으켜 팬이 고장 났거나 PSU가 불량한 것일 수 있습니다. 교환하기 쉬운 것들을 바꿔보십시오.


1

아무도 'sysprof'를 제안하지 않은 이유는 무엇입니까?

이것이 설계된 것입니다.

아니면 음, 두 번째 생각은 ... / etc / security / limits.conf에서 몇 가지 한계를 채우십시오.

둘 다 시도하십시오.

아무것도 얻지 못하면 .... 보안 문제가 있거나 물리적 결함이 있습니다.

또한 참조 : 내 리눅스 서버 "생성 된 프로세스의 수"및 "컨텍스트 스위치"믿을 수 없을 정도로 빠르게 성장하고있다

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