dump文件获取

hprof文件是一种Java堆转储文件(二进制文件),用于分析和诊断Java应用程序的内存使用情况。它包含了Java堆中的对象信息,包括对象的类型、大小、引用关系等。通常情况下,.hprof文件是由Java虚拟机(JVM)生成的,用于记录应用程序在某个时间点的内存快照。

.hprof文件可以提供有关应用程序内存分配、对象泄漏、内存使用量等方面的详细信息。通过分析.hprof文件,开发人员可以确定内存中的对象数量、对象类型、对象之间的引用关系,以及哪些对象可能占用了大量内存或存在内存泄漏的风险。

下面介绍几种获取jvm 堆快照的方法。

零、获取java程序进程id

  • 准备示例程序
curl -O https://arthas.aliyun.com/math-game.jar
java -jar math-game.jar
  • 获取进程id
jps
  • 结果
      jvm jps
    265524 math-game.jar
    268296 Jps
    

一个简单的微信机器人

想法

因为本人是qq的重度玩家(window上的截图软件都是qq 笑),而且一直有用qq做日常记录的习惯,比如日常看到的一些博文或者拿来保存一些手机截图、文件等等。但是!!qq现在我的电脑都只是提供互传功能,并没有记录查询这些玩意,就有很多以前分享过的东西不翻翻就忘了或者记得是分享过一个什么玩意,但翻记录就是翻不出来! 无奈

问题一直都在,想着到时再说,恰巧去年折腾博客的时候弄了一个笔记系统,也就是trilium,它功能非常丰富,但当时也是一时热度,用了几周就没继续,主要是平时长点的记录用现在的博客,一些零碎的也不会特意打开trilium网站记录,至于用trilium手机端记录什么的也没那么好体验,要用小屏做笔记,系统自带的笔记软件是最好用的。

现在只要把qq消息记录到trilium这流程打通,一切就很舒服了!

记一次netty内存泄漏

一、场景

目前使用基于netty的tcp长连接处理电梯秒级数据。

具体来说是处理电梯的modbus报文,这个主从协议要求获取设备的数据需要主动下发命令来触发上报。在频繁的报文接收、处理及发送中,内存泄漏叻。

二、特征

一般内存泄漏主要表现在服务器内存爆满,某个类实例数特别多、占有内存特别多,GC到不行时服务器自动重启,当然最明显的就是会有leak报错(确定服务器崩的大概时间点,翻下error日志,你会找到的),比如下面这样:

trojan

一、简介

技术开发少不了使用代理,因为国内的站点存在大量且重复的各种资料备份,但只有一手的wiki才能精准解决问题,且让你印象深刻。墙这玩意以前觉得是封锁,但久了才会发现这确实是个保护罩。具体其他自己慢慢摸索吧

这里介绍下trojan的客户端部署,之前都是手动安装trojan,改下配置文件就直接用(刚好有三个小鸡就对应安装在台式机、笔记本和pve上)。但由于jia'jing'pin'qiong,对家里台式机的上钟时间稍微做了限制,导致台式机配置的代理对内网用不了,又不可能单纯为此开个虚拟机。

所以就有了这篇内容,可以用docker部署trojan客户端,只要有代理,想开多少开多少。

Archlinx主力机配置记录

硬件环境

  • CPU:AMD5900X
  • 主板:华擎x570太极雷蛇
  • 显卡:3060Ti 8G
  • 台式机!!!

一、archlinx系统安装

视频参考:https://www.bilibili.com/video/BV1J34y1f74E/

1.1 archlinux USB引导安装

把arch镜像写入U盘就行

1.2 设置U盘启动,进入live环境

F2 bro
  • 根据主板进入bios(一般是F2或者F12),禁用安全启动,并选择U盘启动

启动后出现引导加载程序菜单,选择Arch Linux install medium 确认就行

远程桌面控制

一、nomachine介绍

这是一个内网的远程桌面控制软件,使用专有的nx协议连接,会根据网络速度和容量动态调整压缩和带宽,支持win、linux、mac、android、ios。实测使用丝般流畅(得看你的服务器带宽,3M带宽下比向日葵好)。

在内网中使用需要控制与被控端都安装nomachine,启动后会自动扫描并展示可用的nomachine服务。

它的nx协议走的是4000端口,只需对外暴露本地的4000端口就能通过网络连接远程访问!

被控端显示设置

被控端在使用nomachine时不能关闭显示器,可以设置无头(Headless)显示,或者淘宝直接买给假负载给电脑插上。

Dot模板小工具

Quote

轻量前端渲染框架doT,适用自定义数据和模板简单渲染的场合,详情语法及使用参考dot官网1与美团相关解析2

一、dot模板

二、dot模板数据

仅仅支持json格式数据

三、结果

执行

四、内置函数

sayHello = function () {
    return this.name
}

// fisha_shafish_a -> fishaShafishA
camel = function(str, capitalizeFirstLetter) {
    var words = str.split('_');
    var camelCaseStr = words[0];

    for (var i = 1; i < words.length; i++) {
      var capitalizedWord = words[i].charAt(0).toUpperCase() + words[i].slice(1);
      camelCaseStr += capitalizedWord;
    }

    if (capitalizeFirstLetter) {
      camelCaseStr = camelCaseStr.charAt(0).toUpperCase() + camelCaseStr.slice(1);
    }

    return camelCaseStr;
}

// fishaShafishA -> fisha_shafish_a
convertToUnderscore = function(str, uppercase) {
  var underscoreStr = "";

  for (var i = 0; i < str.length; i++) {
    if (str.charAt(i) === str.charAt(i).toUpperCase() && i > 0) {
      underscoreStr += "_" + str.charAt(i).toLowerCase();
    } else {
      underscoreStr += str.charAt(i);
    }
  }

  if (uppercase) {
    underscoreStr = underscoreStr.toUpperCase();
  }

  return underscoreStr;
}

convertToUpperCase = function(str) {
    return str.toUpperCase();
}

convertToLowerCase = function(str) {
    return str.toLowerCase();
}

软路由记录

芯片:N5105

网口识别

dmesg | grep -i eth

物理接口符号 pve识别网口号 物理网口 软路由网口
eth0 enp2s0 02:00.0 eth0(桥接)
eth1 enp3s0 03:00.0 eth3(wan)
eth2 enp4s0 04:00.0 eth2(lan)
eth3 enp5s0 05:00.0 eth1(lan)

抽风的Git

一、现象

代码提交时出现ssh: connect to host ssh.github.com port 443: Connection refused错误

二、解决

1.换回22端口-无用

~/.ssh/config文件中的

Host github.com
Hostname ssh.github.com
PreferredAuthentications pulickey
IdentityFile ~/.ssh/id_rsa
Port 443
去掉

2.指定使用https仓库-无用

vim shafishcn/.git/config,将url = git@github.com:shafishcn/shafish_blog.git改成url = https://github.com/shafishcn/shafish_blog.git

Mysql事务

事务是一组的逻辑操作,该操作只有执行成功和失败两种状态。

事务的特征

  • 原子性:执行的最终状态只有成功和失败这两种;
  • 一致性:事务执行之前和执行之后,数据始终处于一致的状态;
  • 持久性:事务提交完成后,对数据的操作会被持久化到数据库中,且不会被回滚;
  • 隔离性:并发执行的多个事务之间互不干扰。

事务的类型

  • 扁平事务:常见的使用begin/start transaction 开始,commit/rollback结束的事务。事务全部执行成功,或全部执行失败;
  • 保存点扁平事务:在扁平事务的基础上,添加有事务保存点,可以进行回滚至保存点的操作(也就是事务的部分回滚);
    • 设置事务保存点:savepoint pointName
    • 回滚至保存点:rollback to pointName
    • 删除保存点:release savepoint pointName
  • 链式事务:事务的提交操作与下一个事务的开始操作为原子不可分,没有间隔;
  • 嵌套事务:事务操作包含内部子事务,子事务提交后,顶层事务不会全部提交,只有顶层事务提交完成后,整个事务才算提交完成;
  • 分布式事务:不同数据库不同服务器的各个分支事务要全部提交成功,或全部提交失败。