一个 GraphQL API ,耗时长达 7 秒的排查分析(Windows PHP-FPM 可以同时处理多个请求吗?)

一个 GraphQL API ,耗时长达 7 秒
1、一个 GraphQL API ,耗时长达 7 秒。如图1
一个 GraphQL API ,耗时长达 7 秒
图1
2、在 Laravel Telescope 中查询此请求的时间,1345 ms。如图2
在 Laravel Telescope 中查询此请求的时间,1345 ms
图2
3、不在页面中请求 GraphQL API,而是使用 Altair GraphQL Client 单独请求,耗时 1.87 秒。与在 Laravel Telescope 中的时间大致相当。如图3
不在页面中请求 GraphQL API,而是使用 Altair GraphQL Client 单独请求,耗时 1.87 秒。与在 Laravel Telescope 中的时间大致相当
图3
4、现在的运行环境:Windows 10、Nginx 和 PHP FastCGI。这种环境下受到限制,即一次只能服务一个 HTTP 请求。进而导致 GraphQL API 的等待时间长达 7 秒。 5、现在的 Nginx 配置如下


http {
	## PHP-FPM Servers ##
	upstream php-fpm {
		server 127.0.0.1:9000;
	}

	server {
		location ~ \.php$ {
			# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
			fastcgi_pass 127.0.0.1:9000;
			fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
			include fastcgi_params;
		}
	}
}


6、参考:https://stackoverflow.com/questions/15819351/can-windows-php-fpm-serve-multiple-simultaneous-requests 。 7、调整 Nginx 配置如下


http {
	## PHP-FPM Servers ##
	upstream php-fpm {
		server 127.0.0.1:9000;
	}

	upstream php_farm {
        server 127.0.0.1:9003 weight=1;
        server 127.0.0.1:9004 weight=1;
        server 127.0.0.1:9005 weight=1;
		server 127.0.0.1:9006 weight=1;
    }

	server {
		location ~ \.php$ {
			# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
			# fastcgi_pass 127.0.0.1:9000;
			fastcgi_pass php_farm;
			fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
			include fastcgi_params;
		}
	}
}


8、需启动几个 php-cgi 进程并将它们绑定到不同的端口:9003、9004、9005、9006。如图4
需启动几个 php-cgi 进程并将它们绑定到不同的端口:9003、9004、9005、9006
图4
9、重启 Nginx 后。如图5
重启 Nginx 后
图5
10、再次在浏览器中刷新页面,查看 GraphQL API 请求时间。已经缩短至 2 秒左右。符合预期。如图6
再次在浏览器中刷新页面,查看 GraphQL API 请求时间。已经缩短至 2 秒左右。符合预期
图6

我是拥有 15+ 年经验的 PHP / Go 后端工程师。如需以下服务,欢迎联系我(更多介绍请查看 关于我 & 合作):

  • ✅ PHP / Go 项目开发与维护
  • ✅ 系统架构设计与技术咨询
  • ✅ 网站性能优化与故障排查
  • ✅ Linux 服务器部署与运维
  • ✅ 网络环境优化与远程支持
  • ✅ 长期技术顾问合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理