Zend OPcache Huge_code_pages: madvise(HUGEPAGE) 실패

Zend OPcache Huge_code_pages: madvise(HUGEPAGE) 실패

새로 설치된 서버에서 PHP 명령줄 스크립트를 실행할 때 다음 오류가 발생합니다.

PHP 경고: Zend OPcache Huge_code_pages: madvise(HUGEPAGE) 실패: 잘못된 인수

서버는 CentOS 7.3, PHP 7.1.4를 실행합니다.레미 저장소.

~에 따르면레미 포럼에 올라온 이 글, 그리고plesk.com의 이 주제huge_code_pages, 해결책은 php-opcache.ini에서 이를 비활성화하는 것입니다:

opcache.huge_code_pages=0

그러나 레미는설명하다이 문제는 CentOS 7이 아닌 CentOS 6에서만 발생합니다.

huge_code_pages영구적으로 비활성화하기 전에작동하게 하는 방법이 있나요?

답변1

사용 중인 OVH 커널은 다음과 같습니다.OVH 구성 파일, 설정되지 않았습니다 CONFIG_TRANSPARENT_HUGEPAGE=y. 따라서 커널은 투명한 hugepage를 지원하지 않으므로 madvise(HUGEPAGE)잘못된 매개변수 오류로 인해 실패합니다.

투명한 hugepage를 사용하려면 이를 지원하는 커널을 사용해야 합니다. CentOS 7.3 커널로 전환하거나 OVH를 기반으로 직접 빌드하세요.

투명한 hugepage가 작업 부하에 따라 성능 이점을 가져올 수 있는지 벤치마킹하는 것이 좋습니다.

참고로, 커널이 업데이트되었는지 확인해야 합니다. 업데이트에는 중요한 보안 수정 사항이 포함되는 경우가 많습니다. 설치하지 않고 재부팅하면 시스템이 로컬(때로는 원격) 루트 공격에 노출되는 경우가 많습니다.

답변2

허용되는 답변에는 투명한 hugepages 및 잘못된 커널 컴파일 옵션이 언급되어 있습니다.

PHP OPcache는 투명한 hugepages와는 아무 관련이 없으며, 오래된 페이지와 관련이 있습니다.분명히거대한 페이지 메커니즘.

따라서 opcache.huge_code_pages=1OPCache에서 hugepage를 활성화하는 것만으로는 충분하지 않으며 커널 설정을 일부 변경해야 합니다 vm.nr_hugepages = 128( 예 /etc/sysctl.conf: hugepage 크기가 2MB인 경우 256MB의 명시적인 hugepage 할당).

운영 체제에 따라 이것만으로는 충분하지 않을 수도 있습니다. CentOS 7에서는 이러한 페이지가 다음과 같이 설치됩니다.

hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)

충분 해. 다른 배포판에서는 수동으로 설치해야 할 수도 있습니다.여기더 알아보기.

OPCache/웹 서버의 맥락에서 투명 거대 페이지와 명시적 거대 페이지에 대한 자세한 내용은 다음을 참조하세요.여기.

이 논리를 사용하면 무엇이 무엇인지 쉽게 알 수 있습니다.

  • 투명한 hugepage는 실제로 이름이 붙은 대로 투명합니다. 즉, 이를 활성화하기 위해 애플리케이션 측에서 구성을 수행할 필요가 없습니다. 모든 응용 프로그램에 원활하게 적용됩니다.
  • 명시적 hugepage는 특정 애플리케이션 내부와 외부 모두에서 구성/활성화되어야 합니다. 이는 애플리케이션 자체에 이를 지원하기 위한 추가 코드/구성이 있으며 운영 체제가 이러한 거대한 페이지를 활성화하는지 확인해야 함을 의미합니다. 이것이 바로 OPCache의 경우이며 OPCache가 이에 대한 특별한 지침을 제공하는 이유입니다.

이는 OVH 커널에 누락되었을 수 있는 기타 지침에 관한 것입니다. 커널에서문서:

Linux 커널은 CONFIG_HUGETLBFS(파일 시스템 아래에 있음) 및 CONFIG_HUGETLB_PAGE(CONFIG_HUGETLBFS를 선택한 경우 자동으로 선택됨) 구성 옵션을 사용하여 빌드해야 합니다.

관련 정보