monkeyWie / proxyee

HTTP proxy server,support HTTPS&websocket.MITM impl,intercept and tamper HTTPS traffic.
MIT License
1.51k stars 566 forks source link

求大佬修复一下 该如何解决 #182

Open xiaoqiqiya opened 2 years ago

xiaoqiqiya commented 2 years ago

21:11:43.457 [nioEventLoopGroup-4-2] ERROR i.n.u.ResourceLeakDetector - [reportTracedLeak,320] - LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information. Recent access records: Created at: io.netty.buffer.AbstractByteBufAllocator.compositeDirectBuffer(AbstractByteBufAllocator.java:223) io.netty.buffer.AbstractByteBufAllocator.compositeBuffer(AbstractByteBufAllocator.java:201) io.netty.handler.codec.MessageAggregator.decode(MessageAggregator.java:271) io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) com.github.monkeywie.proxyee.intercept.common.FullRequestIntercept.beforeRequest(FullRequestIntercept.java:44) com.github.monkeywie.proxyee.intercept.HttpProxyInterceptPipeline.beforeRequest(HttpProxyInterceptPipeline.java:82) com.github.monkeywie.proxyee.handler.HttpProxyServerHandler.channelRead(HttpProxyServerHandler.java:107) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1533) io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1282) io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1329) io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440) io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) java.lang.Thread.run(Thread.java:745)

monkeyWie commented 2 years ago

有重现步骤吗

xiaoqiqiya commented 2 years ago

有重现步骤吗

刚挂上代理的一瞬间就会出现这个,或者很多请求的时候,有没有可能我把请求release的原因

monkeyWie commented 2 years ago

你是有自定义拦截器吗

xiaoqiqiya commented 2 years ago

你是有自定义拦截器吗

没有

xiaoqiqiya commented 2 years ago

还能解决嘛,这是什么问题呢

monkeyWie commented 2 years ago

@xiaoqiqiya 能贴一下你的代码吗

xiaoqiqiya commented 2 years ago

@xiaoqiqiya 能贴一下你的代码吗

不知道那块代码报的错

monkeyWie commented 2 years ago

启动服务的代码

xiaoqiqiya commented 2 years ago

@Configuration public class ProxyeeConfig { @Bean public HttpProxyServer httpProxyServer(List intercepts, HttpProxyServerConfig serverConfig){ HttpProxyServer httpProxyServer = new HttpProxyServer() .serverConfig(serverConfig) .proxyInterceptInitializer(new HttpProxyInterceptInitializer() { @Override public void init(HttpProxyInterceptPipeline pipeline) { intercepts.forEach(intercept -> { pipeline.addLast(intercept); }); }}); return httpProxyServer;

}

}

@Order(3) @Component public class ApplicationRunnerInit implements ApplicationRunner { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired HttpProxyServer httpProxyServer; @Override public void run(ApplicationArguments args) { logger.info("代理服务器启动了在9999端口"); httpProxyServer.start(9999); } }

monkeyWie commented 2 years ago

我看你有定义拦截器,可能是拦截器里的代码导致的内存泄漏

intercepts.forEach(intercept -> {
  pipeline.addLast(intercept);
});
xiaoqiqiya commented 2 years ago

也就是说我代码的问题吧

monkeyWie commented 2 years ago

@xiaoqiqiya 有可能,或者你提供一个能复现的demo代码给我,我看看问题

xiaoqiqiya commented 2 years ago

好的我试试,感谢大佬解答