Bigzuo's Blog

bigzuo 的博客 | Bigzuo's Blog


  • Home

  • Archives

通过 tcpdump 过滤识别 weblogic t3 请求

Posted on 2020-09-04 | In Linux/tcpdump, network/tcp | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

关键词:tcpdump、tcpdump filter、TCP、weblogic t3

背景介绍

在我们的项目中,我们系统被很多外部系统依赖,我们会提供一些接口给外部系统调用。近期发现我们提供给外部系统的接口可能暴露了一些不该暴露的敏感信息给外部系统,造成了较大的安全隐患。所以我们接到了一个梳理所有对外提供的接口清单的任务。

针对 API 接口,我们主要提供的服务有两大类:HTTP 服务和基于 t3 协议的 EJB 服务,EJB 服务主要存在于内部有一些超过 10 年的老系统。HTTP 服务我们有对应成熟的链路监控,可以很容易梳理接口清单。但是因 EJB 服务在我们公司比较边缘,只存在于部分很老的系统,所有的安全监控、运维监控、网络监控、调用链等平台都未覆盖 EJB 服务,所以通用的请求梳理手段都无法满足需求。

在我们公司,提供了 EJB 服务的系统,同时也会提供 HTTP 服务,且两个服务的端口是同一个,所以无法从网络连接排查 EJB 服务。经过理论分析,如果从基础网络协议出发,只要能在网络应用层协议识别出 EJB 请求(EJB 服务底层使用 t3 协议,和 HTTP 一样,都是应用层协议),那就能找到请求方信息,进而梳理出EJB服务的请求链路。在没有更好方式的情况下,抱着死马当活马医的心态,我们进行了反复的测试和验证,最终验证该方案可行。

Read more »

一次频繁 Full GC 问题定位

Posted on 2020-09-03 | Edited on 2020-09-04 | In Java/JVM | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

关键词:Full GC、Stop the world、request delay

背景介绍

最近公司新上线的一个长连接推送系统,在推送消息量增大时会出现频繁 Full GC, 应用响应也开始变慢。考虑这可能是一个典型的异常 Full GC 问题,所以就记录下整个问题排查过程,以便事后参考。

排查思路

分析已有 GC 日志

针对任何 GC 问题,第一件事就应该是查看线上 GC 日志,从 GC 日志中发现异常和突破口。

在分析已有 GC 日志时,发现每次 Full GC 时,老年代回收的内存空间非常少,或者几乎不回收,找到问题切入点。

  • 通过分析年轻代回收日志可以得知:老年代对象空间占用为:1398015K(堆整体使用空间) - 69888K(年轻代使用空间)=1328127K,约1297M;

  • 通过分析老年代CMS Final Remark阶段日志可以得知:老年代对象在 Full GC 后空间占用为:1328127K,约 1297M;和 Full GC 前一样;

  • 所以频繁 Full GC 的原因是因为老年代对象存活时间长、无法被有效回收,造成每次都空间不够,但是每次 Full GC 又释放不了空间,触发频繁 Full GC 恶性循环;

    Read more »

为什么使用 Java Cipher 要指定转换模式?

Posted on 2019-03-27 | Edited on 2020-09-04 | In Java/JVM | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

前提

写过 Java 程序的同学一定熟悉类似下面的代码:用 Java 加密、解密一些数据。这段代码是如此通用,以至于几乎在每个 Java 项目中都能发现它的身影。但是几乎大部分见过甚至是亲自写过这段代码的人也不一定清楚它的具体含义和运行方式,当有一天发现它运行和预期不一致时,也只是在网上 copy 另外一段类似的代码解决问题。这也是我之前处理这段代码的方式,直到最近遇到一个诡异的问题,才下决心搞清楚它的具体含义。

1
2
3
4
5
6
7
public static byte[] publicDecrypt(PublicKey publicKey, byte[] encryptData) throws Exception {
byte[] output;
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
output = cipher.doFinal(encryptData);
return output;
}
Read more »

使用 Nginx 搭建 HTTPS 正向代理服务

Posted on 2018-12-15 | Edited on 2020-09-04 | In NGINX/HTTP | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

NGINX 搭建 HTTP 正向代理

最近帮同事搭建一个代理服务器,要求当请求的请求头中包含dest_ip时,就将请求转发到这个目的地址,否则就正常请求。当自己用下面这种方式很快就实现 HTTP 正向代理,信心满满的交给同事使用时,却发现这种配置无法正常代理 HTTPS 请求。

1
2
3
4
5
6
location / {
if ($http_dest_ip != "") {
proxy_pass http://$http_dest_ip/$request_uri;
}
proxy_pass https://$http_host$request_uri;
}
Read more »

Spring Cloud 因 Metrics 采集数据剧增导致CPU负载过高问题排查

Posted on 2018-11-06 | Edited on 2020-09-04 | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

关键词:GC Overhead Limit Reached、CPU burst、Spring boot metrics

公司在基于 Spring Cloud 框架的微服务改造过程中,遇到如下问题:当把之前稳定运行在 Spring 3 框架上的业务代码迁移到 Spring Cloud 框架上之后,系统在运行几天后,CPU 的使用率会逐渐增加, GC 频率也会越来越快,最后 CPU 使用率接近100%,GC 每秒钟至少回收超过1G 的新生代对象,系统响应也变的非常慢。

Read more »

Nginx request line 换行导致的 400 异常分析

Posted on 2018-08-12 | Edited on 2020-09-04 | In NGINX | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

NGINX 处理转发请求时报错

最近在做一个需求时,NGINX 出现了 400 异常。具体细节如下:有两台独立的 NGINX,每一台 NGINX 都能正常的处理请求。但是当我用 lua 脚本,将一台 NGINX 接收到的请求筛选后,转发给另外一台 NGINX 处理时,收到如下 400 响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTTP/1.1 400 Bad Request
Server: openresty/1.11.2.2
Date: Mon, 06 Aug 2018 13:36:20 GMT
Content-Type: text/html
Content-Length: 179
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>openresty/1.11.2.2</center>
</body>
</html>
Read more »

NGINX 缓存机制使用不当引发的系统故障

Posted on 2018-02-26 | Edited on 2020-09-04 | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

Shared_dict 共享内存数据丢失

近期突然发生一起很久之前上线的 NGINX lua 功能出现了空指针异常引发的系统故障,该 ngx_lua 模块的功能是统计 NGINX 接收到的 upstream 模块返回的异常请求信息,如果某个接口异常响应次数太多,则就执行对应的过载限流策略。这个功能已上线半年有余,且发生故障时确认过相关配置都没有任何修改。

Read more »

为什么Java GC耗时这么长?

Posted on 2017-07-16 | Edited on 2020-09-04 | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

是什么导致请求响应很慢?

最近公司的一个系统测试环境上了部分新功能后,发现测试环境服务响应很慢,很多没有任何业务逻辑功能的请求,响应也会超过10s。我们对代码加上性能日志后,发现请求的处理会莫名的“卡住”,而不是因为在等待资源产生的停顿。我们在排除掉代码的原因后,开始分析JVM参数和服务器配置是否合理。

首先我们检查了JVM参数配置,具体参数如下:

1
-Xms768M -Xmx768M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:logs/gc.log

我们服务器配置是1核2G,实际可用空间是1.7G,因此结合我们的JVM配置,发现当前配置并无不合理之处。并且测试环境应用请求量并不大,所以也解释不了请求卡顿的原因。

Read more »

【翻译】JMV GC 停顿时间过长问题排查

Posted on 2017-05-31 | Edited on 2020-09-03 | In Java/JVM | Comments:

原文地址:Troubleshooting Long GC Pauses
个人兴趣翻译,能力有限,如有疏漏,请帮忙指正bigzuo.github.io。

较短的时间停顿是很多企业应用程序运行时最主要的目标,尤其对于一些过长的响应延迟可能会导致事务超时的事务系统。对于运行在JVM上面的一些系统,垃圾回收(GC)有时会造成较长时间的停顿。
在本文中,我会介绍几种我们可能会遇到的GC导致长时间停顿的场景,并分析我们应该如何诊断和排查这些问题。

Read more »

深入理解 Java 类加载器及类加载机制

Posted on 2017-05-16 | Edited on 2020-09-04 | In Java/JVM | Comments:

原创文章,如需转载,请注明来自:https://bigzuo.github.io/

什么是类加载器

JVM类加载机制

Tomcat类加载机制

Tomcat 类加载顺序和时间

线程类加载器

类加载器和容器

什么是签名(signature)

理解类加载器的作用

接口A,类B实现接口A。A和B由不同类加载器加载,会有什么问题?

什么是SPI?SPI类加载机制?动手实现?

参考资料

Tomcat 8: Class Loader HOW-TO
深入浅出ClassLoader(译)
java的反射通过类名加载类和ClassLoader通过类名加载类有什么区别?
深入探讨 Java 类加载器
JAR files you should never include in your web-app
Tomcat启动时类加载顺序及运行时类载入顺序
Tomcat 8 类加载机制
图解Tomcat类加载机制
Signature (functions)
How to deal with LinkageErrors in Java?
Java Signatures
Error: Servlet Jar not Loaded… Offending class: javax/servlet/Servlet.class
真正理解线程上下文类加载器(多案例分析)

12

zuoforward@gmail.com

Every failure is leading towards success.

16 posts
6 categories
3 tags
© 2020 zuoforward@gmail.com
Powered by Hexo v3.8.0
|
Theme – NexT.Muse v6.7.0