Appearance
strace
追踪内核执行过程
安装
yum install -y strace
使用
ps -ef | grep nginx
root 877 1 0 15:55 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 1047 877 0 16:04 ? 00:00:00 nginx: worker process
nobody 1048 877 0 16:04 ? 00:00:00 nginx: cache manager process
root 1051 983 0 16:05 pts/0 00:00:00 grep --color=auto nginxstrace -p 1047
之后访问 192.168.44.101
epoll_wait(10, [{EPOLLIN, {u32=1876598800, u64=139687097966608}}], 512, -1) = 1
accept4(6, {sa_family=AF_INET, sin_port=htons(62671), sin_addr=inet_addr("192.168.44.1")}, [112->16], SOCK_NONBLOCK) = 4
epoll_ctl(10, EPOLL_CTL_ADD, 4, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=1876599449, u64=139687097967257}}) = 0
epoll_wait(10, [{EPOLLIN, {u32=1876598800, u64=139687097966608}}, {EPOLLIN, {u32=1876599449, u64=139687097967257}}], 512, 60000) = 2
accept4(6, {sa_family=AF_INET, sin_port=htons(62672), sin_addr=inet_addr("192.168.44.1")}, [112->16], SOCK_NONBLOCK) = 5
epoll_ctl(10, EPOLL_CTL_ADD, 5, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=1876599233, u64=139687097967041}}) = 0
recvfrom(4, "GET / HTTP/1.1\r\nHost: 192.168.44"..., 1024, 0, NULL, NULL) = 534
stat("/usr/local/nginx//html/index.html", {st_mode=S_IFREG|0644, st_size=1, ...}) = 0
open("/usr/local/nginx//html/index.html", O_RDONLY|O_NONBLOCK) = 8
fstat(8, {st_mode=S_IFREG|0644, st_size=1, ...}) = 0
writev(4, [{iov_base="HTTP/1.1 304 Not Modified\r\nServe"..., iov_len=178}], 1) = 178
write(3, "192.168.44.1 - - [07/Oct/2022:16"..., 187) = 187
close(8) = 0
setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0
epoll_wait(10,关闭 sendfile 后访问 192.168.44.101 多出 pread64 读取文件。
epoll_wait(10, [{EPOLLIN, {u32=1876599233, u64=139687097967041}}], 512, 44326) = 1
recvfrom(3, "GET / HTTP/1.1\r\nHost: 192.168.44"..., 1024, 0, NULL, NULL) = 472
stat("/usr/local/nginx//html/index.html", {st_mode=S_IFREG|0644, st_size=1, ...}) = 0
open("/usr/local/nginx//html/index.html", O_RDONLY|O_NONBLOCK) = 9
fstat(9, {st_mode=S_IFREG|0644, st_size=1, ...}) = 0
pread64(9, "1", 1, 0) = 1
writev(3, [{iov_base="HTTP/1.1 200 OK\r\nServer: nginx/1"..., iov_len=234}, {iov_base="1", iov_len=1}], 2) = 235
write(4, "192.168.44.1 - - [07/Oct/2022:16"..., 187) = 187
close(9) = 0
epoll_wait(10, [{EPOLLIN, {u32=1876599233, u64=139687097967041}}], 512, 43498) = 1
recvfrom(3, "GET /favicon.ico HTTP/1.1\r\nHost:"..., 1024, 0, NULL, NULL) = 415
open("/usr/local/nginx//html/favicon.ico", O_RDONLY|O_NONBLOCK) = 9
fstat(9, {st_mode=S_IFREG|0644, st_size=4286, ...}) = 0
pread64(9, "\0\0\1\0\1\0 \0\0\1\0 \0\250\20\0\0\26\0\0\0(\0\0\0 \0\0\0@\0"..., 4286, 0) = 4286
writev(3, [{iov_base="HTTP/1.1 200 OK\r\nServer: nginx/1"..., iov_len=243}, {iov_base="\0\0\1\0\1\0 \0\0\1\0 \0\250\20\0\0\26\0\0\0(\0\0\0 \0\0\0@\0"..., iov_len=4286}], 2) = 4529
write(4, "192.168.44.1 - - [07/Oct/2022:16"..., 222) = 222
close(9) = 0
epoll_wait(10,sendfile 缓存优化
nginx
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 60;
server {
listen 80;
server_name 120.78.79.181;
location / {
# max 表示能够缓存的文件的个数,inactive 表示规定时间内没有被访问则缓存
# 失效。
open_file_cache max=500 inactive=60s;
# 访问多少次后建立缓存
open_file_cache_min_uses 1;
# 定时检查文件有没有发生变化
open_file_cache_valid 60s;
# 错误的信息是否缓存
open_file_cache_errors on;
root html;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}第一次访问有 open
epoll_wait(10, [{EPOLLIN, {u32=1876598800, u64=139687097966608}}], 512, -1) = 1
accept4(6, {sa_family=AF_INET, sin_port=htons(63693), sin_addr=inet_addr("192.168.44.1")}, [112->16], SOCK_NONBLOCK) = 3
epoll_ctl(10, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=1876599232, u64=139687097967040}}) = 0
epoll_wait(10, [{EPOLLIN, {u32=1876598800, u64=139687097966608}}, {EPOLLIN, {u32=1876599232, u64=139687097967040}}], 512, 60000) = 2
accept4(6, {sa_family=AF_INET, sin_port=htons(63694), sin_addr=inet_addr("192.168.44.1")}, [112->16], SOCK_NONBLOCK) = 4
epoll_ctl(10, EPOLL_CTL_ADD, 4, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=1876599448, u64=139687097967256}}) = 0
recvfrom(3, "GET / HTTP/1.1\r\nHost: 192.168.44"..., 1024, 0, NULL, NULL) = 472
open("/usr/local/nginx//html/index.html", O_RDONLY|O_NONBLOCK) = 7
fstat(7, {st_mode=S_IFREG|0644, st_size=1, ...}) = 0
writev(3, [{iov_base="HTTP/1.1 200 OK\r\nServer: nginx/1"..., iov_len=234}], 1) = 234
sendfile(3, 7, [0] => [1], 1) = 1
write(8, "192.168.44.1 - - [07/Oct/2022:16"..., 187) = 187
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
epoll_wait(10, [{EPOLLIN, {u32=1876599232, u64=139687097967040}}], 512, 60000) = 1
recvfrom(3, "GET /favicon.ico HTTP/1.1\r\nHost:"..., 1024, 0, NULL, NULL) = 415
open("/usr/local/nginx//html/favicon.ico", O_RDONLY|O_NONBLOCK) = 12
fstat(12, {st_mode=S_IFREG|0644, st_size=4286, ...}) = 0
writev(3, [{iov_base="HTTP/1.1 200 OK\r\nServer: nginx/1"..., iov_len=243}], 1) = 243
sendfile(3, 12, [0] => [4286], 4286) = 4286
write(8, "192.168.44.1 - - [07/Oct/2022:16"..., 222) = 222
epoll_wait(10,之后访问没有 open
epoll_wait(10, [{EPOLLIN, {u32=1876598800, u64=139687097966608}}], 512, -1) = 1
accept4(6, {sa_family=AF_INET, sin_port=htons(63745), sin_addr=inet_addr("192.168.44.1")}, [112->16], SOCK_NONBLOCK) = 3
epoll_ctl(10, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=1876599232, u64=139687097967040}}) = 0
epoll_wait(10, [{EPOLLIN, {u32=1876599232, u64=139687097967040}}], 512, 60000) = 1
recvfrom(3, "GET / HTTP/1.1\r\nHost: 192.168.44"..., 1024, 0, NULL, NULL) = 534
writev(3, [{iov_base="HTTP/1.1 304 Not Modified\r\nServe"..., iov_len=178}], 1) = 178
write(8, "192.168.44.1 - - [07/Oct/2022:16"..., 187) = 187
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
epoll_wait(10, [{EPOLLIN, {u32=1876598800, u64=139687097966608}}], 512, 60000) = 1
accept4(6, {sa_family=AF_INET, sin_port=htons(63746), sin_addr=inet_addr("192.168.44.1")}, [112->16], SOCK_NONBLOCK) = 4
epoll_ctl(10, EPOLL_CTL_ADD, 4, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=1876599448, u64=139687097967256}}) = 0
epoll_wait(10, [{EPOLLIN|EPOLLRDHUP, {u32=1876599232, u64=139687097967040}}, {EPOLLIN|EPOLLRDHUP, {u32=1876599448, u64=139687097967256}}], 512, 59999) = 2
recvfrom(3, "", 1024, 0, NULL, NULL) = 0
close(3) = 0
recvfrom(4, "", 1024, 0, NULL, NULL) = 0
close(4) = 0
epoll_wait(10,