这里图片加载不了,原文请访问:原文链接

公司的项目,这几天添加了一个统计功能, 本地测试没太大问题,上线后有一个问题,具体现象描述如下:

  • 统计首页接口大约有5-6个,也就是同时需要访问6个接口拿首页数据
  • 这些接口浏览器访问会随机的,偶尔的出现跨域错误,提示CROS。但偶尔又能全部正常访问
  • 本地测试没有问题CROS问题

基于以上描述,首先想到可能nginx会有问题,因为线上和测试环境就只加了一层转发。而测试环境没有这个问题, 于是直接暴露线上服务端口访问,故障依旧。

这里没太想明白为啥是cros错误,对比了下options请求响应,都是正常请求响应的,响应数据也是正确的。所以这个问题暂记下

但是本地启动为什么没有CROS问题呢,看了下线上启动脚本,线上启动有添加堆大小限制的启动命令(限制为512MB)。本地同步添加,果然问题就在本地复现了。

访问浏览器提示跨域时,服务后台日志如下:

14:50:41.003 [http-nio-8985-exec-60] ERROR o.a.c.h.Http11NioProtocol - [log,175] - Failed to complete processing of a request
java.lang.OutOfMemoryError: Java heap space
14:50:41.210 [http-nio-8985-exec-58] ERROR o.a.c.h.Http11NioProtocol - [log,175] - Failed to complete processing of a request
java.lang.OutOfMemoryError: Java heap space
14:50:41.211 [http-nio-8985-exec-60] ERROR o.a.t.u.n.NioEndpoint - [log,175] - Error running socket processor
java.lang.NullPointerException: Cannot invoke "java.nio.ByteBuffer.limit(int)" because "this.byteBuffer" is nullat org.apache.coyote.http11.Http11InputBuffer.recycle(Http11InputBuffer.java:262)at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1418)at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:1085)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1060)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)at java.base/java.lang.Thread.run(Thread.java:842)
14:50:41.211 [http-nio-8985-exec-58] ERROR o.a.t.u.n.NioEndpoint - [log,175] - Error running socket processor
java.lang.NullPointerException: Cannot invoke "java.nio.ByteBuffer.limit(int)" because "this.byteBuffer" is nullat org.apache.coyote.http11.Http11InputBuffer.recycle(Http11InputBuffer.java:262)at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1418)at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:1085)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1060)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)at java.base/java.lang.Thread.run(Thread.java:842)

堆溢出,我擦。第一时间想的就是哪里内存泄漏了? 导出堆空间,分析下内存。 这里可以看到有一个对象堆占用特别多

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来看下堆中各个对象占用情况:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里可以看到 bytes 数组占用太大,有点不正常。 继续跟进去看看谁在引用这些数组。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

把这个字节数组导出来,看看是写什么。 这里面只有http请求头,而且后面很多都是空。 大小125MB.
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继续跟踪字节数组被谁持有
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里可以看到字节数组被一个http11InputBuffer对象的inputBuffer持有, 而inputBuffer里面headerBufferSize属性,这个属性值等于131072000 也就是前面的 125MB

这个headerbuffer怎么这么大啊,谷歌搜索下,这个buffer是用来装http请求的header数据内容,也就是说http每次请求就需要申请125MB的空间,怪不得请求会报堆栈溢出。

再看了下文章,这个属性可以通过 max-http-request-header-size 属性进行配置。

所以接下来就简单了,项目中搜索这个配置。有人配置为:max-http-request-header-size: 131072000 换算下来 1GB。 我的天

这也太大了,调整为10MB吧。 重启项目,问题消失。

结语就是,绕了一大圈,这个跨域错误居然是内存泄漏,这个提示真的有方向性误导啊。哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87504.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87504.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87504.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之线程

Linux之线程 线程之形线程接口线程安全互斥锁条件变量&信号量生产者与消费者模型线程池 线程之形 进程是资源分配的基本单位,而线程是进程内部的一个执行单元,也是 CPU 调度的基本单位。 线程之间共享进程地址空间、文件描述符与信号处理&#xff0…

snail-job的oracle sql(oracle 11g)

官网版本的oracle sql中有自增主键,oracle 11g并不支持,所以改成新建索引和触发器的方式自增主键。(tip:snail-job的最新版本1.0.0必须使用JDK17, jdk8会报错,所以最后没用起来) /*SnailJob Dat…

Windows VMWare Centos Docker部署Nginx并配置对Springboot应用的访问代理

前置博文 Windows VMWare Centos环境下安装Docker并配置MySqlhttps://blog.csdn.net/u013224722/article/details/148928081 Windows VMWare Centos Docker部署Springboot应用https://blog.csdn.net/u013224722/article/details/148958480 # 将已存在的容器设置为宿主机重启后…

暑期数据结构第一天

暑期数据结构第一天 数据元素与数据对象 数据元素--组成数据的基本单位 与数据的关系:是集合的个体 数据对象--性质相同的数据元素的集合 与数据的关系:集合的子集 逻辑结构 (1)线性结构,所有结点都最多有一个直…

vsCode 扩展中 package.nls.json 文件的作用国际化支持

package.nls.json 代表英文语言文件 {"command.favourite.addtofavourite": "Add to Favourite","command.favourite.deletefavourite": "Remove from Favourite","command.favourite.moveup": "Move Up" } 在 …

结构型智能科技的关键可行性——信息型智能向结构型智能的转换(提纲)

结构型智能科技的关键可行性 ——信息型智能向结构型智能的转换 1.信息型智能科技概述 1.1传统计算机科技的信息型继承者 1.2 信息型智能环境 1.3信息型智能主体 1.4机器学习创造的智能 1.5信息型智能科技的问题 2.结构型智能科技概述 2.1传统计算机科技向真实生命结构…

Excel 数据合并助手SheetDataMerge智能识别同类数据,销售报表处理提升效率

各位Excel小能手们!今天给大家介绍个超厉害的玩意儿——SheetDataMerge,这可是专注Excel数据处理的实用工具!它就像个数据小管家,核心功能就是智能合并工作表里的同类数据。 软件下载地址安装包 它有多牛呢?能自动识别…

AIStarter平台使用指南:如何一键卸载已下载的AI项目(最新版操作教程)

如果你正在使用 AIStarter 平台,但不知道如何卸载不再需要的 AI 项目,那么这篇简明教程将为你提供清晰的操作指引。 AIStarter 是由知名创作者“熊哥”打造的一款 AI 工具启动器平台,旨在帮助用户快速部署和运行各类 AI 项目。随着平台不断更…

项目中大表治理方案实践

一、业务背景 目前生产库数据库服务器数据存储达到了13T,其中license_spart表数据量达到了200亿,占用7.5T,空间占用率达到54%。而且这张表每年数据增长量达到30亿。其中有效VALID数据占20亿,无效数据INVALID占180亿。由于业务上有…

快应用(QuickApp)技术解析与UniApp跨端开发生态探秘优雅草卓伊凡

快应用(QuickApp)技术解析与UniApp跨端开发生态探秘优雅草卓伊凡引言:一场由快应用引发的技术辩论近日,优雅草科技的资深开发者卓伊凡在与甲方的一次项目沟通中,因技术选型问题展开了激烈讨论。甲方对快应用&#xff0…

《Font Awesome 参考手册》

《Font Awesome 参考手册》 引言 Font Awesome 是一个功能丰富的图标库,旨在帮助设计师和开发者快速地在网页上添加图标。它提供了超过700个矢量图标,并且支持响应式设计。本文将为您详细介绍 Font Awesome 的使用方法、图标分类、图标定制以及与 CSS 的结合。 一、Font A…

Linux基本命令篇 —— uname命令

uname命令是Linux系统中用于显示系统信息的实用工具,它可以提供关于操作系统、内核版本、硬件架构等重要信息。下面我将详细介绍这个命令的用法和常见应用场景。 目录 一、基本语法 二、常用选项 三、使用示例 显示所有系统信息(最常用) …

React Native 开发环境搭建--window--android

官网: https://reactnative.cn/docs/environment-setup 必须安装的 node, JDK ,android Studio 安装node 以前装了nvm, 用nvm install 18.0.0 就可以了 安装JDK 1、下载 ---- 我安装的是11 【JAVA17下载传送门】 注意!!!1 …

ODS 系统是什么?企业为什么需要搭建 ODS?

目录 一、ODS 系统基础认知:先弄明白它是啥 1. 什么是 ODS 系统? 2. ODS 系统的起源 3. ODS 系统的特点 二、ODS 系统能干啥?核心功能解析 1. 数据集成 2. 数据清洗和转换 3. 实时数据更新 4. 数据查询和分析 三、企业为什么非得搭…

通过网页调用身份证阅读器http websocket方法-华视电子————仙盟创梦IDE

1.安装全浏览器网页专用监控软件 2.安装后 3.配置web接口 4.测试读取 5.驱动监控地址 时间段内读取身份证:如超时时间10000ms,则在点击按钮10秒内,放上身份证就可以读成功,超时返回失败; 读身份证:把身份证放上去后点击读卡,读成功,再次读卡需要将身份证拿起来再放回去; 不拿…

Spring Cloud 前端调用后端接口方式

在 Spring Cloud 微服务架构中,前端调用后端接口通常不直接通过 Eureka,而是通过以下两种核心方式实现: 一、前端直接调用后端服务(需解决跨域和地址管理问题) 1. AJAX 直接调用 前端通过 HTTP 请求(如 …

【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗

目录 一、CubeMX配置RTC 1.RTC实时重要一环——BKP 寄存器 2.RTC实时时钟 2.1打开RTC并设置时间 2.2打开外部低速时钟 2.3代码实现: 二、单片机工作模式 1.低功耗睡眠模式(Sleep) 2.低功耗停止模式(Stop) 3.低功耗待机模式(StandBy) 三、看门狗 1.独立看…

9.Docker的容器数据卷使用(挂载)

什么是容器数据卷技术? 到这里,我算是入门docker了! docker的理念:将环境和应用打包成一个镜像!直接安装就能使用 如果数据都在容器中,那么我们一旦将容器删除,数据就会丢失!因为…

使用 TCollector 写入 TDengine

TCollector 是 openTSDB 的一部分,它用来采集客户端日志发送给数据库。 只需要将 TCollector 的配置修改指向运行 taosAdapter 的服务器域名(或 IP 地址)和相应端口即可将 TCollector 采集的数据存在到 TDengine 中,可以充分利用…

高斯消元法详解

文章目录 概念用法特殊情况 我的奇怪方法 概念 什么是高斯消元?让我们看一看 OI-Wiki 的解释: 高斯消元法(Gauss–Jordan elimination)是求解线性方程组的经典算法,它在当代数学中有着重要的地位和价值,是线性代数课…