我的编程空间,编程开发者的网络收藏夹
学习永远不晚

定位前端POST请求报500的问题(从接口到nginx到服务器)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

定位前端POST请求报500的问题(从接口到nginx到服务器)

一.问题背景

背景是很早之前的项目,前端突然反馈某个POST接口保存特定的内容会报500,没有返回内容,记录一下定位问题的过程。

二.定位问题的过程

1.结合请求数据来看长度大概为15000+,首先想到是数据库字段长度问题。

查询后发现比较长的字段定义的是text类型, 最大长度为65,535(2的16次方–1)字符,排除这种猜想。

2.怀疑是后端接口逻辑的问题。(运行了几年都没问题,大概率不是)

写了个单元测试,模拟用户信息,然后用相同的数据去请求相关的方法,没有问题,排除接口逻辑问题。
在这里插入图片描述

3.怀疑是框架是否对post接口请求数据量做了限制。(因为这个接口正常业务应该只会接受10k以下的数据)

用的pigx框架,排查了请求链路涉及的所有服务,未发现有maxPostSize、max-http-post-size的相关配置,排除框架限制问题。

4.回到数据量问题上。

使用postman模拟请求,将入参特定字段分别以“aaaaaa”的形式定长8000和12000进行请求,发现8000数据可以请求正常,12000不行,那么就确定了是post数据量问题。

5.后端已经排查过了,是否是nginx限制post请求问题。

Tomcat 默认Post请求的数据大小是 2M , Nginx默认Post请求的数据大小是 1M , 超过这个数据量的请求会被直接拒绝,但是目前的界限在10k,我查询了nginx.conf中client_max_body_size,client_body_buffer_size的大小,发现限制大小的参数为2000M(虽然不是很合理,但是并不是这项配置的问题)。

在这里插入图片描述

6.基本能确定是nginx的问题,但是不知道问题出在哪里。

查询nginx的assess.log和error.log,看看报错信息相关的日志。

在这里插入图片描述

发现nginx日志信息打印了22G,我的天,突然好像理顺了问题的原因,连忙看了下服务器的内存:

在这里插入图片描述

7.最终原因:磁盘满了!!!!

nginx在转发数据超过10k以上需要借助磁盘空间,刚好今天上午磁盘才满,所以查ngnix报错日志只截止到今天上午,也查不出来相关的报错信息。当然,问题找到了就好解决:

把nginx的assess.log和error.log都删了,然后重启nginx,磁盘空间释放,重新测试相关接口返回正常,搞定!

三.总结

最后真正找到的原因感觉中间做了好多无用功,但是很多异常的情况需要一步步的落实,解决问题并不耗时,耗时的是如何定位问题。

来源地址:https://blog.csdn.net/xinleiweikai/article/details/131709598

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

定位前端POST请求报500的问题(从接口到nginx到服务器)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录