Tonny's Blog

莫等闲, 白了少年头, 空悲切


  • 首页

  • 标签

  • 分类

  • 归档

使用perf和火焰图分析系统性能

发表于 2018-12-17 | 更新于 2021-02-25 | 分类于 linux , performance
安装perf1yum install -y perf 数据采样1perf record -F 99 -p PID -g -- sleep 60 -F 99: 每秒采样99次-p PID: 指定进程id-g: 记录调用栈sleep 60: 持续60秒, 如果不加则一直采样到手动中断(CRTL+C)为止上面的命令会生成一个perf.data的文件. 执行perf report -n可以生成报告的预览 执行perf report -n --stdio可以生成一个详细的报告 执行perf script > out.perf可以 dump 出 perf.data 的内容 生成火焰图通常的做法是将 out.perf 拷贝到本地机器在本地生成火焰图12345678# 下载火焰图生成工程git clone --depth 1 https://github.com/brendangregg/FlameGraph.git# 折叠调用栈FlameGraph/stackcollapse-perf.pl out.perf > out.folded# 生成火焰图FlameGraph/flam ...
阅读全文 »

spring1 hierarchy

发表于 2018-06-28 | 更新于 2021-02-25 | 分类于 Spring , Hierarchy
基于spring1.0 继承结构
阅读全文 »

build blog

发表于 2018-06-22 | 更新于 2021-02-25

hexo安装与配置

切换阿里npm源

为加快访问速度, 使用阿里的npm源. 文档: https://npm.taobao.org/, 可以使用阿里定制的cnpm替换默认的npm命令

1
$ npm install -g cnpm --registry=https://registry.npm.taobao.org

或者配置一个alias

阅读全文 »

AQS

发表于 2018-05-21 | 更新于 2021-02-25 | 分类于 Java , Concurrent

总体流程:
ReentrantLock.lock -> FairSync.lock() -> AbstractQueuedSynchronizer.acquire() -> FairSync.tryAcquire() 如果失败-> AQS.acquireQueued(AQS.addWaiter()) + thread.interrupt()

1
2
3
4
5
6
// AbstractQueuedSynchronizer
public final void acquire(int arg) {
if (!tryAcquire(arg) &&
acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
selfInterrupt();
}
阅读全文 »

my public ip

发表于 2018-04-30 | 更新于 2021-02-25 | 分类于 fun

服务端

远程vps
开启端口

1
2
iptables -I INPUT -p udp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 1234 -j ACCEPT

阅读全文 »

shadowsocks

发表于 2018-04-30 | 更新于 2021-02-25 | 分类于 shadowsocks

安装系统依赖

1
2
yum install -y openssl-devel gcc swig python-devel autoconf libtool
yum groupinstall "Development Tools"

安装谷歌BBR

网络拥塞算法, 该脚本会自动升级内核

1
2
3
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

阅读全文 »

python

发表于 2018-04-20 | 更新于 2021-08-12 | 分类于 python

基础

数据类型

6种标准数据类型:

阅读全文 »

JVM知识整理

发表于 2018-04-17 | 更新于 2021-02-25 | 分类于 JVM , JAVA

内存

内存区域划分

运行时数据区域

  • 程序计数器: 可以看做当前线程锁执行的字节码的行号指示器, 每个线程有一个. 如果执行的是Native方法, 则为空
  • 虚拟机栈: 描述java方法运行时的内存模型. 线程私有, 生命周期与线程相同. 方法执行时会创建栈帧(Stack Frame)用于存储局部变量表, 操作数栈, 动态链接, 方法出口等信息. 该部分可能会抛出StackOverflowError(当栈深度超过JVM允许的深度时) 或 OutOfMemoryError(虚拟机栈动态扩展时无法申请到足够内存时)
    • 局部变量表: 存放编译器可知的各种基本数据类型, 对象引用和returnAddress. long和double占用2个局部变量空间(slot), 其他的占用1个. 这段空间在编译期间完成了分配.
      阅读全文 »

maven

发表于 2018-03-30 | 更新于 2021-02-25 | 分类于 maven , tools

依赖示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.4.6</version>
<type>jar</type>
<scope>compile</scope>
<optional>true</optional>
<classifier>jdk15</classifier>
<systemPath>${project.basedir}/lib/my-jar.jar</systemPath>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
阅读全文 »

Linux常用命令

发表于 2018-03-08 | 更新于 2021-12-03 | 分类于 linux , command

文件/目录

ls 文件列表

1
2
3
4
5
6
7
8
9
# -1 :每个文件展示一行  -l :展示全部信息(权限, 时间等, 首字母为文件类型: -:普通文件 d:文件夹 s:socket文件 l:链接文件)  
ls -t # 按更新时间排序, 最新的在前
ls -tr # 按更新时间排序, 最旧的在前, -r:倒序
ls -h # 使用可读单位(K, M, G)显示文件大小
ls -d /root/*/ # 显示目录
ls -d */ # 显示当前目录的子目录
ls -a # 显示所有文件, 包括 . 和 ..
ls -A # 显示所有文件, 不包括 . 和 ..
ls -R # 递归展示所有文件, 及子目录内所有文件
阅读全文 »
1…345
Tonny Yi

Tonny Yi

Coding, Life, Zen

49 日志
42 分类
59 标签
GitHub E-Mail
Creative Commons
© 2021 Tonny Yi
由 Hexo 强力驱动
|
主题 — NexT.Mist