====== nginx Performance ====== * [[nginx:gzip|nginx gzip]] * [[nginx:proxy_cache|nginx Proxy Cache]] * [[http://wiki.linuxwall.info/doku.php/en:ressources:dossiers:nginx:nginx_performance_tuning|Nginx Performance Tuning]] * [[http://www.nginxtips.com/nginx-optimization-the-definitive-guide/|Nginx Optimization – The Definitive Guide]] * [[http://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/|Optimizing Nginx for High Traffic Loads]] * [[http://dak1n1.com/blog/12-nginx-performance-tuning|Tuning Nginx for Best Performance]] * [[http://www.lifelinux.com/how-to-optimize-nginx-for-maximum-performance/|How To Optimize Nginx For Maximum Performance]] * [[http://www.cyberciti.biz/faq/nginx-see-active-connections-connections-per-seconds/|nginx: See Active connections / Connections Per Seconds]] * [[http://java.dzone.com/articles/static-file-best-practices|Static File Best Practices on Nginx-Clojure | Javalobby]] * [[http://java.dzone.com/articles/thread-pools-nginx-boost|Thread Pools in NGINX Boost Performance 9x!]] * [[http://www.slideshare.net/btolley/nginx-performance-ppt-2015|Accelerating Nginx Web Server Performance]] * [[https://dzone.com/articles/tuning-nginx|Tuning NGINX: Part I]] * [[https://www.sitepoint.com/apache-vs-nginx-performance-optimization-techniques/|Apache vs Nginx Performance: Optimization Techniques — SitePoint]] * [[https://www.slashroot.in/nginx-web-server-performance-tuning-how-to-do-it|Nginx Performance Tuning: How to do it]] * [[https://github.com/denji/nginx-tuning/blob/master/README.md|nginx-tuning/README.md at master · denji/nginx-tuning]] * [[https://couplewith.tistory.com/entry/%EA%BF%80%ED%8C%81%EA%B3%A0%EC%84%B1%EB%8A%A5-Nginx%EB%A5%BC%EC%9C%84%ED%95%9C-%ED%8A%9C%EB%8B%9D4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%B0%8F-CPU-%ED%8A%9C%EB%8B%9D%ED%95%98%EA%B8%B0-Processor|[꿀팁]고성능 Nginx를위한 튜닝(4)- 메모리 및 CPU 튜닝하기 (Processor)]] * [[https://couplewith.tistory.com/m/entry/%EA%BF%80%ED%8C%81-%EA%B3%A0%EC%84%B1%EB%8A%A5-Nginx%EB%A5%BC%EC%9C%84%ED%95%9C-%ED%8A%9C%EB%8B%9D6-%EB%A1%9C%EA%B7%B8-%EB%B6%80%ED%95%98-%EC%A4%84%EC%9D%B4%EA%B8%B0|[꿀팁] 고성능 Nginx를위한 튜닝(6)-로그 부하 줄이기]] ===== worker와 connection ===== * **''worker_processes''**는 CPU 혹은 CPU Core의 총 갯수와 동일하게 맞춘다. * ''grep processor /proc/cpuinfo | wc -l'' CPU 갯수 * 하지만 보통은 4개 정도가 넘어가면 이미 최대 성능치일 경우가 많다. * **''worker_connections''**는 하나의 ''worker_process''가 받을 수 있는 클라이언트 갯수이다. * 총 접속 가능 클라이언트 갯수(MaxClients)는 ''worker_processes * worker_connections''로 지정된다. * Reverse Proxy 상태에서는 ''worker_processes * worker_connections / 4'' 이 값은 **''ulimit -n''의 결과값(open files)보다 작아야** 한다. 보통 1024면 충분하다. ===== 운영체제 설정값 ===== * 실무에서는 Windows에서 nginx 사용하지 말 것. * 운영체제 nginx 실행 계정의 ''ulimit -a'' 값이 작으면 오류가 발생한다. [[http://wiki.nginx.org/CoreModule#worker_rlimit_nofile|worker_rlimit_nofile]] 값을 줘서 튜닝해본다. ===== 버퍼 ===== * Proxy를 사용할 경우 버퍼의 크기가 너무 작으면 nginx는 임시 파일을 만들어 proxy에서 전달되는 내용을 저장하게 된다. 장비의 메모리 상황등을 참조하여 적당한 수준으로 늘려줘야 한다. client_body_buffer_size 8K; client_header_buffer_size 1k; client_max_body_size 2m; # 파일 업로드를 2mb 이상할 예정이라면 이 값을 늘려줘야 한다. large_client_header_buffers 2 1k; ===== timeout ===== 지연시간이 길 경우 브라우저의 접속을 끊어서 서버 성능을 높여 주도록 한다. client_body_timeout 10; client_header_timeout 10; keepalive_timeout 15; send_timeout 10; * 혹시 대용량 트래픽시에 에러가 나는 것은 한계 트래픽에 가까웠을 때 timeout으로 인한 것은 아닐까? timeout을 높이면 에러가 안나는? ===== access log를 꺼라 ===== * js,image,css 등은 일반적으로 access 로그를 남길 필요가 없다. 해당 location에 대한 access log를 꺼서 Disk IO 부담을 줄여주도록 한다. location /images { access_log off; } 혹은 location ~* \.(js|css|png|jpg|jpeg|gif|ico) { access_log off; } ===== Keep Alive 튜닝 ===== * [[web:performance|Web 성능 향상]] 참조. * keepalive를 무작정 선택하지 말고 성능 테스트를 해가며 조정해 볼 것. * [[https://www.nginx.com/blog/http-keepalives-and-web-performance/|Using NGINX as an Accelerating Proxy for HTTP Servers]] ===== Disk IO 병목 ===== * [[http://wiki.nginx.org/HttpCoreModule#open_file_cache|open_file_cache]]를 해주자. open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; ===== tcp_nopush, tcp_nodelay ===== * 보통은 할 필요 없다. * 하면 성능 향상이 있을 수 있지만, 때로는 오히려 저하가 발생할 수도 있다. 따라서 꼭 테스트가 필요하다. * sendfile on; tcp_nopush on; tcp_nodelay on; * [[http://man7.org/linux/man-pages/man2/sendfile.2.html|sendfile]] * [[http://wiki.nginx.org/HttpCoreModule#tcp_nopush|tcp_nopush]] * [[http://wiki.nginx.org/HttpCoreModule#tcp_nodelay|tcp_nodelay]] ===== Local Port 를 못 열어서 프록시 못하는 문제 ===== * [[https://ma.ttias.be/nginx-cannot-assign-requested-address-for-upstream/|Nginx: Cannot assign requested address for upstream]] * [[https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/|Linux increase ip_local_port_range TCP port range]] $ echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range