概述
当线上的服务中访问中出现500或者502错误时,需要紧急处理,排查问题,该怎么做?可以通过分析一些错误日志或者跟踪php-fpm进程来进行问题定位。
nginx error_log
nginx的error_log在nginx的配置文件中定义的
server {
listen 80;
server_name localhost;
root /var/www;
access_log /users/jiao/logs/default.access.log;
error_log /users/jiao/logs/default.error.log;
location / {
index index.html index.htm index.php;
autoindex on;
}
location = /info {
allow 127.0.0.1;
deny all;
rewrite (.*) /.info.php;
}
location ~ \.php$ {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_filename /var/www$fastcgi_script_name;
include /usr/local/etc/nginx/fastcgi_params;
}
}查看error_log
➜ tail /users/jiao/logs/default.error.log
2019/07/17 11:08:18 [error] 77416#0: *76 kevent() reported about an closed connection (54: connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "get / http/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"
发现出现了connection reset by peer,连接被重置了,此时可以再查看php-fpm的error_log进一步分析问题
php-fpm error_log
php-fpm的error_log在php-fpm.conf文件中配置中定义的
; error log file ; if it's set to "syslog", log is sent to syslogd instead of being written ; in a local file. ; note: the default prefix is /usr/local/var ; default value: log/php-fpm.log error_log = log/php-fpm.log
error_log里面的内容是这样的
➜ tail /usr/local/var/log/php-fpm.log [17-jul-2019 10:49:54] notice: [pool www] child 81948 started [17-jul-2019 11:08:18] warning: [pool www] child 77537, script '/var/www/index.php' (request: "get /index.php") execution timed out (3.801267 sec), terminating [17-jul-2019 11:08:18] warning: [pool www] child 77537 exited on signal 15 (sigterm) after 1503.113967 seconds from start [17-jul-2019 11:08:18] notice: [pool www] child 94339 started
可以看到是请求/var/www/index.php文件出现了超时
dtruss
dtruss是动态跟踪命令,可以根据pid,name跟踪进程
mac环境下使用dtruss,linux环境可以使用strace,pstack
➜ dtruss
usage: dtruss [-acdefholls] [-t syscall] { -p pid | -n name | command | -w name }-p pid # examine this pid -n name # examine this process name -t syscall # examine this syscall only -w name # wait for a process matching this name -a # print all details -c # print syscall counts -d # print relative times (us) -e # print elapsed times (us) -f # follow children -l # force printing pid/lwpid -o # print on cpu times -s # print stack backtraces -l # don't print pid/lwpid -b bufsize # dynamic variable buf size
eg,
dtruss df -h # run and examine "df -h" dtruss -p 1871 # examine pid 1871 dtruss -n tar # examine all processes called "tar" dtruss -f test.sh # run test.sh and follow children
跟踪php-fpm:sudo dtruss -a -n php-fpm<br>
此时访问web页面,就可以看到跟踪内容
21416/0x3479b6: 1559 63 3 getrusage(0x0, 0x7ffee1ec0760, 0x0) = 0 0
21416/0x3479b6: 1561 4 0 getrusage(0xffffffffffffffff, 0x7ffee1ec0760, 0x0) = 0 0
21416/0x3479b6: 1627 77 17 poll(0x7ffee1ec08c0, 0x1, 0x1388) = 1 0
dtrace: error on enabled probe id 2174 (id 159: syscall::read:return): invalid kernel access in action #13 at dif offset 68
dtrace: error on enabled probe id 2174 (id 159: syscall::read:return): invalid kernel access in action #13 at dif offset 68
dtrace: error on enabled probe id 2174 (id 159: syscall::read:return): invalid kernel access in action #13 at dif offset 68
dtrace: error on enabled probe id 2174 (id 159: syscall::read:return): invalid kernel access in action #13 at dif offset 68
dtrace: error on enabled probe id 2174 (id 159: syscall::read:return): invalid kernel access in action #13 at dif offset 68
21416/0x3479b6: 1872 29 24 lstat64("/var/www/index.php\0", 0x7ffee1ecff38, 0x0) = 0 0
21416/0x3479b6: 1884 9 6 lstat64("/var/www\0", 0x7ffee1ecfdf8, 0x0) = 0 0
21416/0x3479b6: 1889 6 3 lstat64("/var\0", 0x7ffee1ecfcb8, 0x0) = 0 0
21416/0x3479b6: 1899 12 8 readlink("/var\0", 0x7ffee1ed0090, 0x400) = 11 0
21416/0x3479b6: 1905 6 4 lstat64("/private/var\0", 0x7ffee1ecfb78, 0x0) = 0 0
21416/0x3479b6: 1917 6 3 lstat64("/private\0", 0x7ffee1ecfa38, 0x0) = 0 0
21416/0x3479b6: 2178 18 14 stat64("/var/www/.user.ini\0", 0x7ffee1ed0240, 0x0) = -1 err#2
21416/0x3479b6: 2217 5 1 setitimer(0x2, 0x7ffee1ed07e0, 0x0) = 0 0
21416/0x3479b6: 2225 4 0 sigaction(0x1b, 0x7ffee1ed0788, 0x7ffee1ed07b0) = 0 0
21416/0x3479b6: 2237 5 1 sigprocmask(0x2, 0x7ffee1ed0804, 0x0) = 0x0 0
21416/0x3479b6: 3643 48 40 open_nocancel(".\0", 0x0, 0x1) = 5 0
21416/0x3479b6: 3648 7 3 fstat64(0x5, 0x7ffee1ed0110, 0x0) = 0 0
21416/0x3479b6: 3653 7 2 fcntl_nocancel(0x5, 0x32, 0x10f252158) = 0 0
21416/0x3479b6: 3661 12 7 close_nocancel(0x5) = 0 0
21416/0x3479b6: 3670 10 7 stat64("/usr/local/var\0", 0x7ffee1ed0080, 0x0) = 0 0
21416/0x3479b6: 3681 11 8 chdir("/var/www\0", 0x0, 0x0) = 0 0
21416/0x3479b6: 3698 4 0 setitimer(0x2, 0x7ffee1ed02d0, 0x0) = 0 0
21416/0x3479b6: 3710 6 3 fcntl(0x3, 0x8, 0x10f3fd858) = 0 0
21416/0x3479b6: 3733 9 6 stat64("/private/var/www/index.php\0", 0x7ffee1ecff10, 0x0) = 0 0
74904/0x332630: 723125 1073381 19 kevent(0x9, 0x0, 0x0) = 0 0
74902/0x332629: 770666 1073387 17 kevent(0x8, 0x0, 0x0) = 0 0
74904/0x332630: 723165 1061954 20 kevent(0x9, 0x0, 0x0) = 0 0
74902/0x332629: 770709 1061954 20 kevent(0x8, 0x0, 0x0) = 0 0
74904/0x332630: 723201 1074786 16 kevent(0x9, 0x0, 0x0) = 0 0
74902/0x332629: 770747 1074783 16 kevent(0x8, 0x0, 0x0) = 0 0
74904/0x332630: 723229 1069141 13 kevent(0x9, 0x0, 0x0) = 0 0
74902/0x332629: 770777 1069145 11 kevent(0x8, 0x0, 0x0) = 0 0
21416/0x3479b6: 3942 3902233 7 __semwait_signal(0x703, 0x0, 0x1) = -1 err#4
74902/0x332629: 770814 103 25 kill(21416, 15) = 0 0
dtrace: error on enabled probe id 2172 (id 161: syscall::write:return): invalid kernel access in action #13 at dif offset 68
dtrace: error on enabled probe id 2172 (id 161: syscall::write:return): invalid kernel access in action #13 at dif offset 68
74902/0x332629: 771325 7 2 sigreturn(0x7ffee1ecfc40, 0x1e, 0xc1a4b78e0404663a) = 0 err#-2
74902/0x332629: 771336 7 3 kevent(0x8, 0x0, 0x0) = 1 0
dtrace: error on enabled probe id 2174 (id 159: syscall::read:return): invalid kernel access in action #13 at dif offset 68
74902/0x332629: 771352 11 7 wait4(0xffffffffffffffff, 0x7ffee1ed0748, 0x3) = 21416 0
dtrace: error on enabled probe id 2172 (id 161: syscall::write:return): invalid kernel access in action #13 at dif offset 68
74902/0x332629: 773511 1957 1899 fork() = 28060 0
28060/0x3754c5: 125: 0: 0 fork() = 0 0
28060/0x3754c5: 128 9 2 bsdthread_register(0x7fff6774c418, 0x7fff6774c408, 0x2000) = -1 err#22
dtrace: error on enabled probe id 2172 (id 161: syscall::write:return): invalid kernel access in action #13 at dif offset 68
74902/0x332629: 773737 4 1 wait4(0xffffffffffffffff, 0x7ffee1ed0748, 0x3) = 0 0
74902/0x332629: 773742 6 3 read(0x5, "\0", 0x1) = -1 err#35
28060/0x3754c5: 320 4 0 getpid(0x0, 0x0, 0x0) = 28060 0
28060/0x3754c5: 328 7 2 __mac_syscall(0x7fff67758a17, 0x4, 0x7ffee1ed0208) = -1 err#45
28060/0x3754c5: 332 5 2 csops(0x6d9c, 0xb, 0x7ffee1ed0248) = -1 err#22
28060/0x3754c5: 755 14 11 dup2(0x1, 0x2, 0x0) = 2 0
28060/0x3754c5: 797 89 22 close(0x4) = 0 0
28060/0x3754c5: 806 11 6 dup2(0x7, 0x0, 0x0) = 0 0
28060/0x3754c5: 817 4 0 geteuid(0x0, 0x0, 0x0) = 501 0
28060/0x3754c5: 820 3 0 close(0x5) = 0 0
28060/0x3754c5: 821 3 0 close(0x6) = 0 0
28060/0x3754c5: 824 5 1 sigaction(0xf, 0x7ffee1ed0688, 0x0) = 0 0
28060/0x3754c5: 825 3 0 sigaction(0x2, 0x7ffee1ed0688, 0x0) = 0 0
28060/0x3754c5: 827 3 0 sigaction(0x1e, 0x7ffee1ed0688, 0x0) = 0 0
28060/0x3754c5: 828 3 0 sigaction(0x1f, 0x7ffee1ed0688, 0x0) = 0 0
28060/0x3754c5: 829 3 0 sigaction(0x14, 0x7ffee1ed0688, 0x0) = 0 0
28060/0x3754c5: 830 3 0 sigaction(0x3, 0x7ffee1ed0688, 0x0) = 0 0
28060/0x3754c5: 1043 3 0 close(0x7) = 0 0可以看到系统底层执行的函数,如lstat64获取文件内容信息,kill(21416, 15)kill掉php-fpm进程,fork()出新的php-fpm进程
The above is the detailed content of How to troubleshoot 500 and 502 errors in the php+nginx service. For more information, please follow other related articles on the PHP Chinese website!
The Ultimate Showdown: NGINX vs. ApacheApr 18, 2025 am 12:02 AMNGINX is suitable for handling high concurrent requests, while Apache is suitable for scenarios where complex configurations and functional extensions are required. 1.NGINX adopts an event-driven, non-blocking architecture, and is suitable for high concurrency environments. 2. Apache adopts process or thread model to provide a rich module ecosystem that is suitable for complex configuration needs.
NGINX in Action: Examples and Real-World ApplicationsApr 17, 2025 am 12:18 AMNGINX can be used to improve website performance, security, and scalability. 1) As a reverse proxy and load balancer, NGINX can optimize back-end services and share traffic. 2) Through event-driven and asynchronous architecture, NGINX efficiently handles high concurrent connections. 3) Configuration files allow flexible definition of rules, such as static file service and load balancing. 4) Optimization suggestions include enabling Gzip compression, using cache and tuning the worker process.
NGINX Unit: Supporting Different Programming LanguagesApr 16, 2025 am 12:15 AMNGINXUnit supports multiple programming languages and is implemented through modular design. 1. Loading language module: Load the corresponding module according to the configuration file. 2. Application startup: Execute application code when the calling language runs. 3. Request processing: forward the request to the application instance. 4. Response return: Return the processed response to the client.
Choosing Between NGINX and Apache: The Right Fit for Your NeedsApr 15, 2025 am 12:04 AMNGINX and Apache have their own advantages and disadvantages and are suitable for different scenarios. 1.NGINX is suitable for high concurrency and low resource consumption scenarios. 2. Apache is suitable for scenarios where complex configurations and rich modules are required. By comparing their core features, performance differences, and best practices, you can help you choose the server software that best suits your needs.
How to start nginxApr 14, 2025 pm 01:06 PMQuestion: How to start Nginx? Answer: Install Nginx Startup Nginx Verification Nginx Is Nginx Started Explore other startup options Automatically start Nginx
How to check whether nginx is startedApr 14, 2025 pm 01:03 PMHow to confirm whether Nginx is started: 1. Use the command line: systemctl status nginx (Linux/Unix), netstat -ano | findstr 80 (Windows); 2. Check whether port 80 is open; 3. Check the Nginx startup message in the system log; 4. Use third-party tools, such as Nagios, Zabbix, and Icinga.
How to close nginxApr 14, 2025 pm 01:00 PMTo shut down the Nginx service, follow these steps: Determine the installation type: Red Hat/CentOS (systemctl status nginx) or Debian/Ubuntu (service nginx status) Stop the service: Red Hat/CentOS (systemctl stop nginx) or Debian/Ubuntu (service nginx stop) Disable automatic startup (optional): Red Hat/CentOS (systemctl disabled nginx) or Debian/Ubuntu (syst
How to configure nginx in WindowsApr 14, 2025 pm 12:57 PMHow to configure Nginx in Windows? Install Nginx and create a virtual host configuration. Modify the main configuration file and include the virtual host configuration. Start or reload Nginx. Test the configuration and view the website. Selectively enable SSL and configure SSL certificates. Selectively set the firewall to allow port 80 and 443 traffic.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 English version
Recommended: Win version, supports code prompts!

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment






