自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 使用mtrace追踪JVM堆外内存泄露

glibc自带的ptmalloc2分配器,也提供有追踪内存泄露的机制,即mtrace,这使得发生内存泄露时,可直接定位,而不需要额外安装及重启操作。

2023-09-23 20:50:47 232

原创 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

最近,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%)。。。

2023-08-26 19:55:55 2136 1

原创 Java服务刚启动时,一小波接口超时排查全过程

我们组有一个流量较大的Java服务,每次发代码时,服务都会有一小波接口超时,之前简单分析过,发现这些超时的case仅发生在服务刚启动时,少量请求会耗时好几秒,但之后又马上恢复正常。

2023-07-23 19:10:00 254

原创 分享6个SQL小技巧

经常有小哥发出疑问,SQL还能这么写?我经常笑着回应,SQL确实可以这么写。其实SQL学起来简单,用起来也简单,但它还是能写出很多变化,这些变化读懂它不难,但要自己Get到这些变化,可能需要想一会或在网上找一会。

2023-06-17 22:30:59 224

原创 java获取到heapdump文件后,如何快速分析?

在之前的OOM问题复盘之后,本周,又一Java服务出现了内存问题,这次问题不严重,只会触发堆内存占用高报警,没有触发OOM,但好在之前的复盘中总结了dump脚本,会在堆占用高时自动执行jstack与jmap,使得我们成功保留了问题现场。虽然我也用MAT很多次了,但每次问题都太简单,以至于没有深入使用过MAT,导致到现在才知道有如此便捷的分析路径。

2023-04-21 22:18:55 822 1

原创 jmap执行失败了,怎么获取heapdump?

在之前的OOM问题复盘中,我们添加了jmap脚本来自动dump内存现场,方便排查OOM问题,但当我反复模拟OOM场景测试时,发现jmap有时可以dump成功,有时会报错

2023-04-16 14:12:35 364

原创 一次线上OOM问题的个人复盘

java服务上线后,偶尔会发生内存OOM问题,但由于OOM导致服务不响应请求,健康检查多次不通过,最后部署平台kill了java进程,这导致定位这次OOM问题也变得困难起来。

2023-04-01 16:29:38 370

原创 传参base64时的+号变空格问题

突然,老哥发出一声卧槽,"我传参里的+号,到你这怎么变成了空格!",这个声音很大,我明显的听到了,很快,我就大概Get到了他们的问题点。

2023-03-25 19:43:00 577

原创 由x-www-form-urlencoded引发的接口对接失败

这里展示了一个实用技巧,对于http接口来说,排查这种接口调用差异问题,最直接高效的方法,就是对比正确调用与错误调用的数据包!

2023-03-18 10:23:12 400

原创 在Linux上查看活跃线程数与连接数

现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能低下

2023-03-04 17:39:57 1302

原创 我有一篇Java Stream使用手册,学了就是你的了!

日常编程工作中,Java集合会经常被使用到,且经常需要对集合做一些类似过滤、排序、对象转换之类的操作。为了简化这类操作,Java8添加了一套新的Stream API,使用方式就像写SQL一样,大大简化了这类处理的实现代码量与可读性。

2023-02-25 12:38:04 311

原创 记一次使用gdb诊断gc问题全过程

上次解决了GC长耗时问题后,系统果然平稳了许多,然而,过了一段时间,我检查GC日志时,又发现了一个GC问题😣

2023-02-04 19:06:02 111

原创 请求量突增一下,系统有效QPS为何下降很多?

最近我观察到一个现象,当服务的请求量突发的增长一下时,服务的有效QPS会下降很多,有时甚至会降到0。

2023-01-16 22:54:52 262

原创 GC耗时高,原因竟是服务流量小?

最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里分享下。

2023-01-07 22:23:42 351

原创 Java8中那些方便又实用的Map函数

java8之后,常用的Map接口中添加了一些非常实用的函数,可以大大简化一些特定场景的代码编写,提升代码可读性,一起来看看吧。

2022-11-12 14:49:07 649

原创 Optional用法与争议点

要说Java中什么异常最容易出现,我想NullPointerException一定当仁不让,为了解决这种null值判断问题,Java8中提供了一个新的工具类Optional,用于提示程序员注意null值,并在特定场景中简化代码逻辑。

2022-11-06 21:02:23 417

原创 如何kill一条TCP连接?

如果你的程序写得有毛病,打开了很多TCP连接,但一直没有关闭,即常见的连接泄露场景,你可能想要在排查问题的过程中,先临时kill一波泄露的连接。又比如你要验证程序在遇到网络错误时的自愈能力,想手动kill掉一些正常TCP连接,看程序是否能自动重连并恢复运行。这些场景,都需要手动kill一部分TCP连接,那在Linux下有哪些kill连接的方法呢?

2022-10-29 15:41:55 4619

原创 Java实现7种常见密码算法

JCA里定义了一系列类,如Cipher、MessageDigest、MAC、Signature等,分别用于实现加密、密码学哈希、认证码、数字签名等算法,一起来看看吧!

2022-10-22 11:58:44 1654

原创 tar、gzip、zip、jar是什么,怎么查看?

我想你一定见过*.tar.gz、*.zip、*.jar后缀的文件吧,这些都是压缩文件,那这些文件都是怎么生成的,又有哪些关键区别呢?

2022-09-17 15:46:12 1569

原创 异或的4种神奇的运用场景

众所周知,编程语言一般都内置了3种位运算符&(AND)、|(OR)、~(NOT),用来实现位运算,但其实还有一种非常常用的位运算,即异或^(XOR)

2022-09-10 16:36:40 724

原创 Linux查看日志文件写入速度的4种方法

有时,我们需要查看某个文件的增长速度,如日志文件,以此来感受系统的负载情况,因为一般情况下,日志写入越快,说明系统负载越重。

2022-06-11 11:12:20 884

原创 jq命令用法总结

原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介如果说要给Linux文本三剑客(grep、sed、awk)添加一员的话,我觉得应该是jq命令,因为jq命令是用来处理json数据的工具,而现如今json几乎无所不在!网上的jq命令分享文章也不少,但大多介绍得非常浅,jq的强大之处完全没有介绍出来,所以就有了这篇文章,安利一下jq这个命令。基本用法格式化# jq默认的格式化输出$ echo -n '{"id":1, "name":"zhangsan", "sc.

2022-05-29 21:35:04 9327 1

原创 容器内的Linux诊断工具0x.tools

原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介Linux上有大量的问题诊断工具,如perf、bcc等,但这些诊断工具,虽然功能强大,但却需要很高的权限才可以使用。而0x.tools这个工具提供了一个很好的思路,通过采样/proc目录来诊断问题,对被测量程序几乎无性能影响,且只要与目标进程拥有同等级的权限,即可正常使用。不要小看这个权限区别,在互联网大厂,开发同学一般只能获取到一个受限于容器内的shell环境,想要获取机器的root权限几乎是不可能的。安装#.

2022-05-07 16:18:08 313

原创 一次IOS通知推送问题排查全过程

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。发现问题在上周一个将要下班的夜晚,测试突然和我打招呼,说IOS推送的修复更新上线后存在问题,后台报错。连忙跑到测试那里看报错详情,报错如下:重现问题看到这个报错后,在网上搜索了一下,这种错误一般都是因为客户端不信任服务端SSL证书导致的,回想工作以来,好像遇到这种问题好多次了,只要将证书导入一下就好了。由于不能冒然在线上修改解决问题,于是获取推送相关信息(如:设备token)后,到自己电脑上去测试,看是否能重现问.

2022-05-04 15:08:35 1796

原创 密码学入门

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介在信息安全领域,一般会遇到"窃听"、“篡改”、“伪装”、"否认"这些威胁,而密码学家们提供了相应的密码学算法来解决这些问题,如下:窃听:攻击者可以在网络上安置了一个路由器,侦听所有经过的数据包,这样数据就被泄密了,密码学提供了对称密码与公钥密码算法对数据加密,保证机密性。篡改:攻击者对经过的数据包进行修改,使得接收方获取到错误的信息,密码学提供了单向散列函数生成“数据指纹”,保证数据完整性。伪装:攻击者伪装成.

2022-04-29 20:38:51 2906

原创 hex,base64,urlencode编码方案对比

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介在工作过程中,我们慢慢会了解到hex、base64、urlencode这3种常见的字节编码方案,它们是如此的熟悉,可是经常我们自己也说不清为啥要使用它们,下面我会详细解释下。hex编码hex编码,又称十六进制编码(也称base16),一般用于方便人们查看二进制文件内容,它将字节数据中的每4个bit使用数字(0-9)、字母(A-F)共16个字符等效表示,由于一个字节有8个bit,所以一个字节会被编码为2个hex字符,.

2022-04-21 13:13:07 2748

原创 字符编码解惑

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介现代编程语言都抽象出了String字符串这个概念,注意它是一个高级抽象,但是计算机中实际表示信息时,都是用的字节,所以就需要一种机制,让字符串与字节之间可以相互转换,这种转换机制就是字符编码,如GBK,UTF-8所以可以这样理解字符串与字符编码的关系:字符串是一种抽象,比如java中的String类,它在概念上是编码无关的,里面包含一串字符,你不需要关心它在内存中是用什么编码实现的,尽管字符串在内存中存储也是需要.

2022-04-18 13:03:57 191

原创 真正理解可重复读事务隔离级别

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。事务简介SQL 标准定义了四种隔离级别,这四种隔离级别分别是:读未提交(READ UNCOMMITTED):在这种隔离级别下,可能会出现脏读、不可重复读、幻读问题。读提交 (READ COMMITTED):解决脏读问题。可重复读 (REPEATABLE READ):解决脏读、不可重复读问题。串行化 (SERIALIZABLE):解决脏读、不可重复读、幻读问题。这里不详细解释脏读、不可重复读、幻读问题这些现象了.

2022-04-10 12:04:41 1110

原创 20个常用的Linux工具命令

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介网上有很多辅助开发的小工具,如base64,md5之类的,但这些小工具其实基本都可以用Linux命令实现,即方便又高效。查看特殊字符把这个放在首位,是因为这个实在太重要了,程序经常会因为特殊的看不见的字符而出现bug,因此一些本应该执行正确而实际出乎意料的字符串处理,你都应该看看是否含有特殊字符。$ echo 'hello'|sed -n 'l'hello$$ echo 'hello'|cat -Ahell.

2022-04-09 12:42:24 1760

原创 正则表达式技巧与注意事项

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介现如今,正则表达式几乎是程序员的必备技能了,它入手确实很容易,但如果你不仔细琢磨学习,会长期停留在正则最基本的用法层面上。因此,本篇文章,我会介绍一些能用正则解决的场景,但这些场景如果全自己琢磨实现的话,需要花一些时间才能完成,或者就完全想不出来,另外也会介绍一些正则表达式的性能问题。匹配多个单词比如我想匹配zhangsan、lisi、wangwu这三个人名,这是一个很常见的场景,其实在正则里面也算基本功,但鉴于.

2022-04-05 20:20:58 355

原创 常用网络命令总结

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。网络连通性检测当应用出现网络异常时,首先需要确认的就是网络的连通性是否正常,下面一组命令可快速检测网络的连通性,如下:检测DNSdig www.baidu.combashnslookup www.baidu.combashhost www.baidu.com检测主机是否可达ping www.baidu.com检测port是否可达#检查tcp端口telnet www.baidu.com 80#检查ud.

2022-04-01 13:29:25 261

原创 自己能调通接口,别人调不通?

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。场景有时我们开发了一个api接口,自己调得好好的,接口文档也写好了,但别人调用时就是有问题,而当我们调试时,发现请求根本没进来或进来了却取不到调用参数,该怎么告知对方调用姿势哪不对呢?解决方法对于编码新手,一般会和对方撕扯一会,然后甚至去review对方的代码,这样也许能解决问题,但自己毕竟不熟悉别人系统的实现,耗费时间较长。另外api调用端可能因为封装方式不同或者加过一些拦截器,导致你看调用端的代码根本看不到什么问.

2022-03-27 14:27:21 572 2

原创 q命令-用SQL分析文本文件

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介在Linux上分析文本文件时,一般会使用到grep、sed、awk、sort、uniq等命令,但这些命令都有一定的学习成本,而如果是用SQL来分析数据的话,这对广大后端程序员来说,就要简单很多了。而q命令就是这样一款工具,可以在空白、逗号分隔的文本文件上执行SQL运算,非常方便。安装# ubuntu下安装$ sudo apt install python3-q-text-as-data# centos下可下.

2022-03-26 21:10:36 1204

原创 还在胡乱设置连接保活时间?

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。场景写过一段时间代码后,对连接池应该不会陌生,MySQL、HttpClient、MQ等这些都需要连接池,而一般来说,服务端程序会自动断开长时间不交互的连接,但TCP连接本身是无法感知到对端关闭的,因此连接池组件一般都需要配置一个保活时间,连接池组件需要根据这个值来判断连接是否存活,那么该怎么配置此值呢?检测服务端空闲断连时间首先最容易想到的,就是使用抓包软件了,比如wireshark,根据TCP连接时会发SYN包,断开.

2022-03-26 14:51:52 753

原创 到底该用GMT+8还是GMT-8?

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介最近在使用date命令时,发现表示东8区(中国时区)要使用GMT-8,但在Java中却需要使用GMT+8,如下:$ TZ='GMT-8' date -d@1647658144 +'%F %T %:z'2022-03-19 10:49:04 +08:00# 如果用GMT+8,反而慢了16小时$ TZ='GMT+8' date -d@1647658144 +'%F %T %:z'2022-03-18 18:49.

2022-03-19 17:40:49 12260 1

原创 使用socat反向Shell多台机器

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。场景很多时候,我们需要批量操作多台机器,业界一般使用Ansible来实现,但使用Ansible来操作多台机器的前提是需要有ssh权限的,可悲的是,对于开发人员来说,一般是没有正式环境机器的ssh权限的,只能通过一个指定的入口登录机器,也可以理解,毕竟正式环境如此重要。不过,如果你的生产环境可以访问你的开发机,那么可以通过反向Shell来访问机器,然后将反向Shell与tmux结合,又可实现同时操作多台机器的效果,这就是本.

2022-03-16 13:24:02 679

原创 常见的Socket网络异常场景分析

原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介在目前微服务的背景下,网络异常越来越常见了,而有一些网络异常非常模糊,理解什么情况下会导致什么异常,还是有一定难度的,为此我做了大量实验,来复现各种异常场景。socket状态变迁图先快速回顾下正常情况下TCP的交互过程与socket状态变迁,如下:三次握手客户端调用connect函数,会发SYN包给服务端,客户端状态变为SYN_SENT,服务端收到后变为SYN_RECV,同时回复SYN+ACK包给客户端。.

2022-03-13 17:38:08 3245 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除