小编今天偶然遇到了504异常,凭经验来讲,知道此异常属于服务器异常,但具体细节原因也没有深入去记一下,今天在此简单说一下。
一般来讲,Java开发的异常比较多的就是404,500等,而一般50几基本都是服务器或者服务器的Nginx异常。
504异常是指服务器无法及时响应客户端请求而导致的异常。
而异常的原因在应用开发中是多种多样的。小编简单说几种,如有不足支持欢迎补充。
1.Java在请求大数据的时候,由于数据量大,在请求中对数据操作,导致请求会很长时间才进行返回,导致超时错误,这个地方有两层解决方案,第一层,优化数据操作业务代码,减少循环,尽量减少一次性查询全部数据,采用分页,明显来说,像一次性查询几十万条几百万条数据,速度肯定会很慢,而如果对这种大量数据做操作,像循环,如果是静态数据循环速度会比较快,但是做了像请求第三方接口或请求数据库或其他耗时的操作,就会增加接口的返回时间。第二层:增加程序的响应时间,像springboot:
spring.mvc.async.request-timeout=60000
spring.mvc.read-timeout=60000
2.Java 的请求到程序中,因为一些莫名的原因死掉,导致请求无法返回也会导致504异常。
3.通过查询日志,请求很有可能没进入程序就挂掉了,很大的可能是程序的端口在服务器未开放,在服务器开放程序所需求的端口,客户端的Java请求也就能顺利访问了。
4.服务器资源不足也会导致504错误,资源不足是指服务器的运行内存不足,cpu不够用了,导致服务器无法及时处理请求,这里可以通过增加服务器的硬件资源,就可以解决。再一个服务器负载过高也是504的重要原因之一,可以通过负载均衡器,将请求分发到多个服务器上,提高整体的处理能力,或者以异步的形式来处理请求,来提高请求的可用性。
5.504还有一个原因之一是网络通信异常,网络通信不顺畅,也可能导致客户端收到504异常,这里的网络异常,很有可能是因为在请求处理中,请求了第三方接口导致数据处理一直处于等待中,等等。