디렉토리
성능 최적화 개요
각 서비스에 대해 1
2, 비즈니스 모델을 이해하는 데 필요한
3. 마지막으로, 우리는 성능과 안전성을 고려할 필요가
스트레스 테스트 도구
[root@web01 conf.d]# yum install httpd-tools -y
#配置nginx
[root@lb01 conf.d]# cat try.conf
server {
listen 80;
server_name try.haoda.com;
location / {
root /code;
try_files $uri $uri/ @java;
index index.jsp index.html;
}
location @java {
proxy_pass http://172.16.1.8:8080;
}
}
#配置nginx使用的静态页面
[root@lb01 conf.d]# echo "nginx ab" > /code/ad.html
#配置tomcat使用的静态页面
[root@web02 ~]# wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz
[root@web02 ~]# tar xf apache-tomcat-9.0.16.tar.gz
[root@web02 ~]# cd /usr/share/tomcat/webapps/ROOT
[root@web02 ROOT]# echo "tomcat aaaaa" > tomcat.html
#压测工具测试nginx处理静态资源
[root@lb01 conf.d]# ab -n 10000 -c 200 http://try.haoda.com/ad.html
Server Software: nginx/1.14.2
Server Hostname: try.haoda.com
Server Port: 80
Document Path: /ad.html
Document Length: 9 bytes
Concurrency Level: 200
Time taken for tests: 1.078 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2380000 bytes
HTML transferred: 90000 bytes
Requests per second: 9272.58 [#/sec] (mean)
Time per request: 21.569 [ms] (mean)
Time per request: 0.108 [ms] (mean, across all concurrent requests)
Transfer rate: 2155.15 [Kbytes/sec] received
#压测工具测试tomcat处理静态资源
[root@lb01 conf.d]# ab -n 10000 -c 200 http://try.haoda.com/tomcat.html
Server Software: nginx/1.14.2
Server Hostname: try.haoda.com
Server Port: 80
Document Path: /tomcat.html
Document Length: 13 bytes
Concurrency Level: 200
Time taken for tests: 4.956 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2510000 bytes
HTML transferred: 130000 bytes
Requests per second: 2017.78 [#/sec] (mean)
Time per request: 99.119 [ms] (mean)
Time per request: 0.496 [ms] (mean, across all concurrent requests)
Transfer rate: 494.59 [Kbytes/sec] received
성과 지표의 영향을 이해
1、网络
(1)网络的流量
(2)网络是否丢包
(3)这些会影响http的请求与调用
2、系统
(1)硬件有没有磁盘损坏,磁盘速率
(2)系统的负载、内存、系统稳定性
3、服务
(1)连接优化。请求优化
(2)根据业务形态做对应的服务设置
4、程序
(1)接口性能
(2)处理速度
(3)程序执行效率
5、数据库
#每个服务与服务之间都或多或少有一些关联,我们需要将整个架构进行分层,找到对应系统或服务的短板,然后进行优化
시스템 성능 최적화
파일은 리눅스의 모든 자주 우리의 프로세스를 호출하는 시스템 기본 파일 핸들이 제한되어 증가 파일 핸들의 파일, 인덱스로 이해 될 수있는 파일 핸들을,이다, 처리하지 무제한 통화는 프로세스, 그래서 우리는 제한 할 필요가 각 서비스는 파일 핸들을 사용하는 방법을 각 프로세스 및 파일 핸들 조정 매개 변수를 조정 할 필요가있다.
파일이 배치 처리 :
1, 글로벌 시스템을 수정합니다.
2, 로컬 사용자가 수정할 수 있습니다.
3 국부 개질 방법.
[root@lb01 ~]# vim /etc/security/limits.conf
1、系统全局性修改。
# * 代表所有用户
* soft nofile 25535
* hard nofile 25535
2.用户局部性修改
#针对root用户,soft仅提醒,hard限制,nofile打开最大文件数
root soft nofile 65535
root hard nofile 65535
3.进程局部性修改
#针对nginx进程,nginx自带配置
worker_rlimit_nofile 30000
4.调整内核参数:让time_wait状态重用(端口重用)[flag]
[root@web01 ROOT]# vim /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
[root@web01 ROOT]# sysctl -p #可以查看我们添加的内核参数
[root@web01 ROOT]# sysctl -a #可以查看所有内核参数
짧은 높은 동시 TCP 서버 연결에서 서버 요청이 제대로 처리되었을 때 즉시 활성 연결을 닫습니다. 이 시나리오에서 TIME_WAIT 상태에있는 소켓의 많은 수있을 것입니다. 동시 클라이언트의 양이 높은 유지되면, 클라이언트가 연결되어 있지 않은 부분을 표시 할 것이다. 내가이 시나리오를 설명해 보자. 정상적인 TCP 연결이 닫혀 이니셔티브, 시간 대기있을 것입니다.
왜 우리는 짧은이 높은 동시 연결에 대해 관심을 가져야? 이주의해야 할 두 가지 측면은 다음과 같습니다 동시에 높은 동시성 서버가 짧은 시간에 포트를 많이 만들 수 있습니다 1., 그리고 포트는 시스템 및 기타 서비스, 나머지의 사용을 제외하고, 0 ~ 65535의 범위, 아니 많이있다 더 적은. 2.이 시나리오에서는 짧은 연결은 연결 "비즈니스 프로세스 시간 + 데이터 전송 시간은 타임 아웃 시간 대기보다 훨씬 적다"이다.
연결이 종료 된 후 다음 예는 웹 페이지를 가지고 같은 개념의 상대적인 길이는, HTTP 1초 짧은 비즈니스 접속이 처리되고, 포트에서 머무를 것이다이 비즈니스는 몇 분 몇 분이다 시간 대기 상태, 기타 소요 HTTP 요청이 올 때이 포트를 (다른 사람의 이익 시앙 당겨) 걸릴 수 없습니다. 수백, 서버 자원의 심각한 낭비 :이 혼자 비즈니스 컴퓨팅 서버 활용하고 뭔가 심각한 시간 서버와 포트 (자원) 비율을 걸려하면 1 시간에 사용할 수없는 것을 발견 할 것이다. (말 여담은, 이러한 의미에서 서버 성능 조정을 고려하기 시작, 다음, 긴 연결 서비스 사업은 시간 대기 상태를 고려할 필요가 없다. 동시에, 당신은 서버 비즈니스 시나리오에 대해 잘 알고 있다면, 당신은 실제 비즈니스 시나리오에있는 것을 발견 할 것이다 , 금액은 일반적으로 접속의 동시 동작의 길이는 매우 높지에 대응.
프록시 서비스 최적화
긴 연결을 사용의 nginx 프록시 서비스 구성
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16; #长连接
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1; #对于http协议应该指定为1.1
proxy_set_header Connection ""; #清除“connection”头字段
proxy_next_upstream error timeout http_500 http_502 http_503 http_504; #平滑过渡
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30s; # 代理连接web超时时间
proxy_read_timeout 60s; # 代理等待web响应超时时间
proxy_send_timeout 60s; # web回传数据至代理超时时间
proxy_buffering on; # 开启代理缓冲区,web回传数据至缓冲区,代理边收边传返回给客户端
proxy_buffer_size 32k; # 代理接收web响应的头信息的缓冲区大小
proxy_buffers 4 128k; # 缓冲代理接收单个长连接内包含的web响应的数量和大小
...
}
}
FastCGI를 서버의 경우 [플래그] fastcgi_keep_conn 설정 긴 연결을 유지해야합니다
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 8;
}
server {
...
location /fastcgi/ {
fastcgi_pass fastcgi_backend;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_keep_conn on;
fastcgi_connect_timeout 60s;
include fastcgi_params;
...
}
}
연결 킵 얼라이브 제공 요청의 최대 수로 설정 keepalive_requests 요청의 최대 개수를 실행 한 후, 연결을 종료한다.
Syntax: keepalive_requests number;
Default: keepalive_requests 100;
Context: upstream
keepalive_timeout 다시 열린 상태로 유지됩니다 프록시 서버 동안 시간 제한, 유휴 연결 유지 연결을 설정합니다.
Syntax: keepalive_timeout timeout;
Default: keepalive_timeout 60s;
Context: upstream
#该指令出现在1.15.3版中
참고 :
1.scgi의 uwsgi 계약 및 연결의 개념을 유지하지 않았다.
2. 그러나 프록시, FastCGI를인지, uwsgi 프로토콜은 현장 방문을 연 후 효율성을 가속화 할 수 있습니다, 캐시 캐시 기능을 가지고 있습니다. (하드웨어에 따라)
정적 리소스 캐싱
어떤 브라우저 캐시 없다
이 브라우저 캐시
오래된 브라우저 확인 메커니즘
浏览器If-None-Match "9-1550193224000" 询问 web服务器 etag "9-1550193224000"
浏览器认为只是缓存过期,内容并没有修改,所以协商后还是304
浏览器If-Modified-Since Tue, 29 Jan 2019 02:29:51 GMT
询问
web服务器 Last-Modified: Tue, 29 Jan 2019 02:29:51 GMT
浏览器认为只是缓存过期,内容并没有修改,所以协商后还是304
정적 자원 캐시 장면 구성
server {
listen 80;
server_name static.haoda.com;
location ~ .*\.(jpg|gif|png)$ {
expires 7d;
}
location ~ .*\.(js|css)$ {
expires 30d;
}
}
캐시 취소
location ~ \.*(png|jpg|gif|jpeg)$ {
expires 30d;
add_header Cache-Control no-store;
add_header Pragma no-cache;
}
}
정적 자원 압축
location ~* .*\.(jpg|gif|png)$ {
root /code/images;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2; #极致为9,压缩的级别
gzip_types image/jpeg image/gif image/png; #文件格式
}
TXT를 들어
[root@Nginx conf.d]# cat static_server.conf
server {
listen 80;
server_name static.oldboy.com;
sendfile on;
location ~ .*\.(txt|xml|html|json|js|css)$ {
gzip on;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types text/plain application/json application/x-javascript application/css application/xml text/javascript;
}
}
자원 Daolian 방지
다른 리소스를 참조 안티 - 핫 링크는 악의적 인 웹 사이트의 도난을 방지합니다.
기본적인 아이디어를 안티 - 핫 링크 : 주로 요청을 검증하기 위해 수행 된 클라이언트 요청 프로세스의 헤더 정보의 일부의 정당성에 대한 이러한 리퍼러 정보를 전달합니다 요청하는 과정에서 클라이언트로. 장점은 쉽게 구성 및 사용하는 간단한 규칙이다, 단점은 보안 체인 리퍼러 인증 정보를 위조 할 수 있습니다 따라, 그래서 리퍼러 도난 방지 체인에 의해 100 % 신뢰할 수있는 정보, 그러나 그는 Daolian 대부분의 경우를 제한 할 수 있습니다.
Syntax: valid_referers none | blocked | server_name | string ...;
Default: -;
Context: server, location
#none: referer来源头部为空的情况
#blocked: referer来源头部不为空,这些都不以http://或者https://开头
#server_name: 来源头部信息包含当前域名,可以正则匹配
Syntax: valid_referers none | blocked | server_name | string ...;
Default: -;
Context: server, location
#none: referer来源头部为空的情况
#blocked: referer来源头部不为空,这些都不以http://或者https://开头
#server_name: 来源头部信息包含当前域名,可以正则匹配
서버 5.4.1 준비 html 파일은 내 사진을 도용 Daolian
<html>
<head>
<meta charset="utf-8">
<title>haoda.com</title>
</head>
<body style="background-color:black;">
<img src="http://39.104.205.72/picture/niu.jpg"/>
</body>
</html>
5.4.2 액세스 페이지보기
5.4.3 서버의 보안 체인 구성
location ~ .*\.(jpg|png|gif) {
root /data;
valid_referers none blocked 39.104.205.72;
if ( $invalid_referer ) {
return 403;
}
}
위의 구성의 의미는, if 문에 403 개 고객을 반환 1 다음 $ 동일 invalid_referer이 목록, 원본 도메인에 있지 않은 경우 사용자가를 볼 수 있도록 모든 사진의 현재 사이트에 액세스 할 수 39.104.205.72에서 말했다 403 페이지
5.4.4 당신은 반환을 사용하지 않는 경우 만 재 작성으로, 다음 핫 링크 이미지는 사용자 pei.jpg로 돌아갑니다
location ~ .*\.(jpg|png|gif) {
root /data;
valid_referers none blocked 39.104.205.72;
if ( $invalid_referer ) {
rewrite ^(.*)$ /picture/pei.jpg break;
}
}
5.4.5 일부 사이트는 Daolian 수 원하는 경우
location ~ .*\.(jpg|png|gif) {
root /data;
valid_referers none blocked 39.104.205.72 server_name ~\.google\. ~\.baidu\.;
if ( $invalid_referer ) {
return 403;
}
}
물론, 이것은 100 % 보장하지 않으며 우리가 명령의 정보 소스를 참조 수정할 수 있기 때문에 보호 자원, 핫 링크되지 않습니다.
[root@lb01 conf.d]# curl -e "http://www.baidu.com" -I http://39.104.205.72/picture/niu.jpg
[root@lb01 conf.d]# curl -e "http://39.104.205.72" -I http://39.104.205.72/picture/niu.jpg
제작 실습
1. 구성 사이트
[root@web02 conf.d]# cat static.conf
server {
listen 80;
server_name static.oldboy.com;
root /code;
location / {
index index.html;
}
}
2. 업로드 2 사진
사진이 핫 링크 할 수 있습니다
하나의 광고 사진입니다
서버를 다시 시작합니다
[root@web02 code]# systemctl restart nginx
3. 구성 서버 Daolian
[root@web01 conf.d]# cat try.conf
server {
server_name dl.oldboy.com;
listen 80;
root /code;
location / {
index index.html;
}
}
구성 페이지 Daolian
[root@web01 code]# cat /code/tt.html
<html>
<head>
<meta charset="utf-8">
<title>oldboyedu.com</title>
</head>
<body style="background-color:red;">
<img src="http://static.oldboy.com/smg.jpg"/> #根据情况修改你的服务器地址
</body>
</html>
4.web02 보안 체인 동작을 추가
location ~* \.(gif|jpg|png|bmp)$ {
valid_referers none blocked *.xuliangwei.com server_ names ~\.google\.;
if ($invalid_referer) {
return 403; #可以选择直接返回403
rewrite ^(.*)$ /ggw.png break; #也可以选择返回一张水印的图片,给公司做广告
}
크로스 도메인 액세스 허용
1. 웹 사이트를 구성
[root@Nginx ~]# cat /code/http_origin.html
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>测试ajax和跨域访问</title>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "GET",
url: "http://naonao.lq.com/1.jpg",
success: function(data) {
alert("sucess!!!");
},
error: function() {
alert("fail!!,请刷新再试!");
}
});
});
</script>
<body>
<h1>测试跨域访问</h1>
</body>
</html>
2. 구성 B 웹 사이트
3. 브라우저 테스트를 통해 도메인 간 액세스
4. 웹 사이트 B의 사이트 도메인 간 액세스를 허용하려면
server {
server_name naonao.lq.com;
listen 80;
root /code;
location / {
index index.html;
}
location ~* \.(gif|jpg|png|bmp)$ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
}
}
CPU 선호도
1. CPU의 현재 물리적 상태를보기
[root@nginx ~]# lscpu |grep "CPU(s)"
CPU(s): 24 #总的核心数
On-line CPU(s) list: 0-23
每个物理cpu使用的是那些核心(代表2颗物理CPU,)
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23
#本次演示服务器为 两颗物理cpu,每颗物理CPU12个核心, 总共有24个核心
Nginx에 프로세스가 자동으로 수정하는 작업을 시작
worker_processes auto;
worker_cpu_affinity auto;
[root@web01 ~]# ps -eo pid,args,psr|grep [n]ginx
1242 nginx: master process /usr/ 2
1243 nginx: worker process 0
1244 nginx: worker process 1
1245 nginx: worker process 2
1246 nginx: worker process 3
不推荐调整的方式
# 第一种绑定组合方式
worker_processes 24;
worker_cpu_affinity 000000000001 000000000010 000000000100 000000001000 000000010000 000000100000 000001000000 000010000000 000100000000 001000000000 010000000000 10000000000;
# 第二种方式(使用较少)
worker_processes 2;
worker_cpu_affinity 101010101010 010101010101;
Nginx의 일반적인 구성 Nginx의 프록시 구성의 Nginx로 Fastcgi
[root@nginx ~]# cat nginx.conf
user www; # nginx进程启动用户
worker_processes auto; #与cpu核心一致即可
worker_cpu_affinity auto; # cpu亲和
error_log /var/log/nginx/error.log warn; # 错误日志
pid /run/nginx.pid;
worker_rlimit_nofile 35535; #每个work能打开的文件描述符,调整至1w以上,负荷较高建议2-3w
events {
use epoll; # 使用epoll高效网络模型
worker_connections 10240; # 限制每个进程能处理多少个连接,10240x[cpu核心]
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8; # 统一使用utf-8字符集
# 定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # 访问日志
server_tokens off; # 禁止浏览器显示nginx版本号
client_max_body_size 200m; # 文件上传大小限制调整
# 文件高效传输,静态资源服务器建议打开
sendfile on;
tcp_nopush on;
# 文件实时传输,动态资源服务建议打开,需要打开keepalive
tcp_nodelay on;
keepalive_timeout 65;
# Gzip 压缩
gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_buffers 16 8k;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml applicati
on/xml+rss text/javascript image/jpeg;
# 虚拟主机
include /etc/nginx/conf.d/*.conf;
}
Nginx의 보안 및 최적화 요약
파일 1.cpu 선호도의 수, 작업자 프로세스의 수, 오프닝 조정하기 위해 각 작업자 프로세스
2. epool 네트워크 모델을 각 연결 노동자 최대 수를 조정하는 과정
3. 파일을 sendfile을 효율적으로 읽기, NOPUSH,
4. 파일 실시간 전송은 nodealy
5. TCP 오픈 긴 링크 및 롱 링크 타임 아웃 keepalived
제 시작 GZIP 압축 파일 전송
7. 정적 파일 캐쉬를 열 만료
제 숨겨진 Nginx의 버전 번호
(9)는, IP 어드레스에 의한 액세스를 금지하는 악성 도메인 금지를 전용 도메인 이름 분석
(10), 방전 Daolian 구성, 도메인 간 액세스
, 11 항 DDOS, CC 공격하는 동시 연결을 단일 IP, HTTP 요청 및 제한하는
제 한계 우아한 Nginx의 에러 페이지
암호화 HTTPS가 전송 최적화 13.nginx
14. 의 nginx의 proxy_cache, fastcgi_cache, uwsgi_cache 캐시
오징어, 니스 ()
PHP 최적화
1.php 구성 관리 프로그램 파일 /etc/php.ini은, 주로, 로그, 파일 업로드를 조정 위험한 기능을 금지, 버전 번호 표시를 닫으려면, 등
#;;;;;;;;;;;;;;;;;
Error logging ; #错误日志设置
#;;;;;;;;;;;;;;;;;
expose_php = Off # 关闭php版本信息
display_error = Off # 屏幕不显示错误日志
error_reporting = E_ALL # 记录PHP的每个错误
log_errors = On # 开启错误日志
error_log = /var/log/php_error.log # 错误日志写入的位置
date.timezone = Asia/Shanghai # 调整时区,默认PRC
#;;;;;;;;;;;;;;;
File Uploads ; #文件上传设置
#;;;;;;;;;;;;;;;
file_uploads = On # 允许文件上传
upload_max_filesize = 300M # 允许上传文件的最大大小
post_max_size = 300M # 允许客户端单个POST请求发送的最大数据
max_file_uploads = 20 # 允许同时上传的文件的最大数量
memory_limit = 128M # 每个脚本执行最大内存
[Session] #会话共享
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379" #有密码写?
https://blog.csdn.net/unixtech/article/details/53761832
#php禁止危险函数执行(取决于实际情况,需要和开发沟通)
disable_functions = chown,chmod,pfsockopen,phpinfo
2.php-FPM 프로세스 관리 프로파일 /etc/php-fpm.conf
#第一部分,fpm配置
;include=etc/fpm.d/*.conf
#第二部分,全局配置
[global]
;pid = /var/log/php-fpm/php-fpm.pid #pid文件存放的位置
;error_log = /var/log/php-fpm/php-fpm.log #错误日志存放的位置
;log_level = error #日志级别, alert, error, warning, notice, debug
rlimit_files = 65535 #php-fpm进程能打开的文件数
;events.mechanism = epoll #使用epoll事件模型处理请求
#第三部分,进程池定义
[www] #池名称
user = www #进程运行的用户
group = www #进程运行的组
;listen = /dev/shm/php-fpm.sock #监听在本地socket文件
listen = 127.0.0.1:9000 #监听在本地tcp的9000端口
;listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP,any不限制
pm = dynamic #动态调节php-fpm的进程数
pm.max_children = 512 #最大启动的php-fpm进程数
pm.start_servers = 32 #初始启动的php-fpm进程数
pm.min_spare_servers = 32 #最少的空闲php-fpm进程数
pm.max_spare_servers = 64 #最大的空闲php-fpm进程数
pm.max_requests = 1500 #每一个进程能响应的请求数
pm.process_idle_timeout = 15s;
pm.status_path = /phpfpm_status #开启php的状态页面
#第四部分,日志相关
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/phpfpm_error.log
php_admin_flag[log_errors] = on
#慢日志
request_slowlog_timeout = 5s #php脚本执行超过5s的文件
slowlog = /var/log/php_slow.log #记录至该文件中
慢日志示例
[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
3.php 상태 페이지 pm.status_path = / phpfpm_status 번호 PHP는 열려있는 상태 페이지
프로필
[root@nginx ~]# curl http://127.0.0.1/phpfpm_status
pool: www #fpm池名称,大多数为www
process manager: dynamic #动态管理phpfpm进程
start time: 05/Jul/2016 #启动时间,如果重启会发生变化
start since: 409 #php-fpm运行时间
accepted conn: 22 #当前池接受的连接数
listen queue: 0 #请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量
max listen queue: 0 #请求等待队列最高的数量
listen queue len: 128 #请求等待队列的长度
idle processes: 4 #php-fpm空闲的进程数量
active processes: 1 #php-fpm活跃的进程数量
total processes: 5 #php-fpm总的进程数量
max active processes: 2 #php-fpm最大活跃的进程数量(FPM启动开始计算)
max children reached: 0 #进程最大数量限制的次数,如果数量不为0,则说明phpfpm最大进程数量过小,可以适当调整。
4.PHP-FPM 프로필 -4- 코어 16G, 4 코어 32G
[root@nginx ~]# cat /etc/php-fpm.d/www.conf
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = warning
rlimit_files = 655350
events.mechanism = epoll
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 512
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 64
pm.process_idle_timeout = 15s;
pm.max_requests = 2048
pm.status_path = /phpfpm_status
#php-www模块错误日志
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php/php-www.log
php_admin_flag[log_errors] = on
#php慢查询日志
request_slowlog_timeout = 5s
slowlog = /var/log/php-slow.log
개요
nginx를
硬件层面 代理比较的消耗CPU、内存、 静态比较消耗磁盘IO、
网络层面 网络带宽大小、传输速率、是否有丢包、
系统层面 调整文件描述。 timewait重用
应用层面 nginx作为代理 keepalive 长连接
服务层面 nginx作为静态 浏览器缓存、文件传输、压缩、防盗链、跨域访问、CPU亲和 nginx作为缓存 proxy_cache fastcgi_cache uwsgi_cache nginx作为安全 nginx+lua实现waf防火墙
PHP
php.ini 错误日志记录、文件大小的调整、session会话共享的配置、禁止不必要的函数(与开发协商)
php-fpm 监听地址、进程的动态调节、日志开启。
php状态 php自身监控的状态信息
php慢查询 什么时间、什么进程、运行什么文件、哪个函数、第几行达到了超时时间