Nginx mmap (MAP ANON | MAP SHARED, 314572800) 에 대한 오류 보고

3792 단어
mmap 오류 해결
오늘 테스트 환경의 Nginx nginx. conf 를 수정 하고 테스트 를 하 다가 오류 가 발생 했 습 니 다.
/usr/local/bin/nginx -c /usr/local/etc/openresty/conf/nginx.conf -t

nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 314572800) failed (12: Cannot allocate memory)
nginx: configuration file /usr/local/etc/openresty/conf/nginx.conf test failed

오류 알림 이 분명 해서 메모 리 를 분배 할 수 없습니다.왜 메모 리 를 분배 할 수 없 습 니까?기본적으로 물리 적 메모리 가 부족 해서 먼저 메모리 를 찾 아 보 았 다
free -m
              total        used        free      shared  buff/cache   available
Mem:            990         568          75          54         347         224
Swap:             0           0           0

실제로 사용 할 수 있 는 메모리 가 224 M 정도 인 것 을 볼 수 있다.바로 Nginx 가 이번에 검사 한 설정 은 224 M 이상 의 메모 리 를 사용 해 야 한 다 는 것 이다.이치 대로 말 하면, Nginx 자 체 는 메모리 가 얼마 필요 하지 않다.우리 시스템 에 서 는 openresty 를 대량으로 사용 합 니 다. 먼저 openresty 의 한 인용 신청 메모리 가 너무 많 을 것 이 라 고 의심 한 다음 설정 을 찾 았 습 니 다. 과연 openresty 의 공유 메모리 사용 을 발견 하 였 습 니 다.
lua_shared_dict xxx 300m;
lua_shared_dict yyy 100m;

총 400 M 메모리 가 필요 합 니 다. 이 두 공유 메모 리 는 좀 작 으 면 될 것 같 습 니 다.... 로 바꾸다
lua_shared_dict xxx 100m;
lua_shared_dict yyy 30m;

그리고 검 사 를 통 과 했 습 니 다.
/usr/local/bin/nginx -c /usr/local/etc/openresty/conf/nginx.conf -t
nginx: the configuration file /usr/local/etc/openresty/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/openresty/conf/nginx.conf test is successful

테스트 가 성공 하 였 습 니 다. reload Nginx 가 성공 적 으로 유효 합 니 다.
Nginx 메모리 신청 모듈
꼭 openresty 가 메모 리 를 공유 하 는 냄비 는 아 닐 수도 있 습 니 다.Nginx 설정 은 메모리 설정 이 필요 한 곳 이 많 지 않 습 니 다. 하나씩 검사 하면 됩 니 다.
openresty lua_shared_dict
lua_shared_dict 는 http 모듈 에 정 의 됩 니 다.공유 메모리 영역 을 설명 합 니 다. 공유 메모리 영역 은 현재 Nginx 서버 인 스 턴 스 의 모든 Nginx 프로 세 스 가 공유 합 니 다.매개 변 수 는 크기 단 위 를 받 아들 입 니 다. 예 를 들 어 K 와 M 등 입 니 다.
http {
     lua_shared_dict dogs 10m;
     ...
 }

proxy_cache_path
proxy_cache_path path [levels=levels] keys_zone=name:size
path        
levels          , levels=1:2 ,       ,1 2   1  2 16         。
keys_zone             ,keys_zone=one:10m,         one,   10M,        ,         ,mmap(MAP_ANON|MAP_SHARED, 314572800)
       
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
          
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

limit_req_zone
limit_req_zone key zone=name:size rate=rate
           
      
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

클 라 이언 트 의 IP 를 스 트림 제한 키 로 사용 하여 공유 메모리 에 10m 가 할당 되 었 습 니 다. 공유 메모리 의 이름 은 원 입 니 다. 속 도 는 클 라 이언 트 IP 마다 1 초 에 1 개의 요청 입 니 다. 1 개 이상 의 요청 이 지연 되 거나 직접 거부 할 수 있 습 니 다. limit 을 보 셔 야 합 니 다.req 의 설정 입 니 다. $binary_remote_addr 변수의 크기 는 4 바이트 입 니 다.64 비트 플랫폼 에서 128 바이트 를 차지 했다.1M 구역 은 약 8000 개의 클 라 이언 트 IP 를 보존 할 수 있다.그래서 10M 은 8 만 개의 클 라 이언 트 IP 를 정확하게 저장 할 수 있 습 니 다.스 트림 제한 클 라 이언 트 IP 가 8 만개 이상 이면 공유 메모 리 를 확대 해 야 한다.
limit_conn_zone
limit_conn_zone key zone=name:size;
          
limit_conn_zone $binary_remote_addr zone=addr:10m;

연결 수 제한 흐름 의 매개 변 수 는 요청 수 매개 변수 와 유사 합 니 다.클 라 이언 트 의 IP 를 스 트림 제한 키 로 사용 하고 공유 메모리 에 10m 가 할당 되 며 공유 메모리 의 이름 은 addr 입 니 다.10M 은 8 만 개의 클 라 이언 트 IP 를 저장 할 수 있다.제한 흐름 의 구체 적 인 수량 제한 은 limitconn 설정 예:
limit_conn addr 1;

모든 클 라 이언 트 IP 가 동시에 하나의 연결 만 존재 한 다 는 것 을 나타 낸다.
총 결 Nginx mmap
따라서 나중에 Nginx mmap (MAP ANON | MAP SHARED, 314572800) 에 대한 오류 가 발생 하면 먼저 큰 메모 리 를 할당 할 수 있 는 설정 을 검사 해 야 합 니 다. 가장 먼저 검사 하 는 것 은 이 두 lua 입 니 다.shared_dict proxy_cache_path 는 이 두 개의 인 자 를 수정 하면 문 제 를 해결 할 수 있 습 니 다.
일반 limitreq_zone limit_conn_zone 에서 분 배 된 메모리 가 매우 작 아서 몇 십 M 이 넘 으 면 시스템 에 메모리 가 분배 되 지 않 습 니 다.

좋은 웹페이지 즐겨찾기