- 浏览: 361915 次
- 性别:
- 来自: 北京
最新评论
文章列表
Linux命令行工具之vmstat命令
- 博客分类:
- Linux
原创转载请注明出处:https://agilestyle.iteye.com/blog/2442428
vmstat是一款指定采样周期和次数的功能性监测工具,可以使用它监控进程上下文切换的情况。
Note:
vmstat 1 10 命令行代表每秒收集一次性能指标,总共获取10次。以下为上图中各个性能指标的注释:
procs
r:等待运行的进程数
b:处于非中断睡眠状态的进程数
memory
swpd:虚拟内存使用情况
free:空闲的内存
buff:用来作为缓冲的内存数
cache:缓存大小
swap
si:从磁盘交换到内存的交换页数量
so:从内存 ...
线程饥饿
- 博客分类:
- Concurrent
Reference: https://time.geekbang.org/column/article/85702
饥饿:线程因无法访问所需资源而无法执行下去的情况。
“不患寡,而患不均”,如果线程优先级“不均”,在CPU繁忙的情况下,优先级低的线程得到执行的机会很小,就可能发生线程“饥饿”;持有锁的线程,如果执行的时间过长,也可能导致“饥饿”问题。
解决“饥饿”问题的方案很简单,有三种方案:一是保证资源充足,二是公平地分配资源,三就是避免持有锁的线程长时间执行。这三个方案中,方案一和方案三的适用场景比较有限,因为很多场景下,资源的稀缺性是没办法解决的,持有锁的线程执行的时 ...
线程活锁
- 博客分类:
- Concurrent
Reference: https://time.geekbang.org/column/article/85702
活锁:有时线程虽然没有发生阻塞,但仍然会存在执行不下去的情况。
可以类比现实世界里的例子,路人甲从左手边出门,路人乙从右手边进门,两人为了不相撞,互相谦让,路人甲让路走右手边,路人乙也让路走左手边,结果是两人又相撞了。这种情况,基本上谦让几次就解决了,因为人会交流啊。可是如果这种情况发生在编程世界了,就有可能会一直没完没了地“谦让”下去,成为没有发生阻塞但依然执行不下去的“活锁”。
解决“活锁”的方案很简单,谦让时,尝试等待一个随机的时间就可以了。例如上面的那个 ...
原创转载请注明出处:https://agilestyle.iteye.com/blog/2442165
UNSIGNED属性就是将数字类型无符号化,与C、C++这些程序语言中的unsigned含义相同。
例如,INT的类型范围是-2 147 483 648 ~ 2 147 483 647, INT UNSIGNED的范围类型就是0 ~ 4 294 967 295。
在MYSQL中整型范围:
类型
大小
范围(有符号
范围(无符号)
TINYINT
1 字节
(-128,127)
(0,255)
SMALLINT
2 字节
(- ...
Docker常规操作
- 博客分类:
- Docker
原创转载请注明出处:https://agilestyle.iteye.com/blog/2441670
Docker 常⽤命令
镜像相关
• docker pull <image>
• docker search <image>
容器相关
• docker run
• docker start/stop <容器名>
• docker ps <容器名>
• docker logs <容器名>
docker run 的常⽤选项
docker run [OPTIONS] IMAGE [COMMAND] [ ...
线程死锁
- 博客分类:
- Concurrent
原创转载请注明出处:https://agilestyle.iteye.com/blog/2440433
死锁:一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象。
解决死锁,要么重启,要么规避
那如何避免死锁呢?要避免死锁就需要分析死锁发生的条件,只有以下这四个条件都发生时才会出现死锁:
1.互斥,共享资源 X 和 Y 只能被一个线程占用;
2.占有且等待,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;
3.不可抢占,其他线程不能强行抢占线程 T1 占有的资源;
4.循环等待,线程 T1 等待线程 T2 占有的资源,线程 ...
原创转载请注明出处:https://agilestyle.iteye.com/blog/2440384
使用如下指令查看当前Server的TCP状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
常用的三个状态
ESTABLISHED 表示正在通信
TIME_WAIT 表示主动关闭
CLOSE_WAIT 表示被动关闭
主动关闭的一方发出 FIN 包,被动关闭的一方响应 ACK 包,此时,被动关闭的一方就进入了 CLOSE_WAIT 状态。
如果一切正常,稍后被动关闭的 ...
Reference:https://time.geekbang.org/column/article/75797
文件页
内存回收,也就是系统释放掉可以回收的内存,比如缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做文件页(File-backed Page)。大部分文件页,都可以直接回收,以后有需要时,再从磁盘重新读取就可以了。
脏页
那些被应用程序修改过,并且暂时还没写入磁盘的数据(也就是脏页),就得先写入磁盘,然后才能进行内存释放。
这些脏页,一般可以通过两种方式写入磁盘。可以在应用程序中,通过系统调用 fsync ,把脏页同步到磁盘中;也可以交给系统, ...
原创转载请注明出处:https://agilestyle.iteye.com/blog/2440026
Minor GC 清理年轻代
Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC。因为新 ...
Reference:https://time.geekbang.org/column/article/74633
磁盘和文件
磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。
其实 Linux 中“一切皆文件”,而提到的“文件”是普通文件,磁盘是块设备文件,可以执行 "ls -l <路径>" 查看它们的区别(输出的含义如果不懂请 man ls 查询)。
在读写普通文件时,会经过文件系统,由文件系统负责与磁盘交互;而读写磁盘或者分区时,就会跳过文件系统,也就是所谓的“裸I/ ...
原创转载请注明出处:https://agilestyle.iteye.com/blog/2439738
使用 -heap 查看heap空间概要
jmap -heap 41565 > ~/jmap.txt
Console Output
Attaching to process ID 41565, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11 ...
原创转载请注明出处:https://agilestyle.iteye.com/blog/2439724
1.查看当前应用占用的PID,比如41565
ps -ef | grep ${application_name}
2. 查看进程内部线程占用情况
top -H -p 41565
3. 找出占用CPU最多的线程ID,比如41575,打印出对应的16进制号,比如:a267
printf "%x\n" 41575
4. 通过jstack打出当前JVM线程快照信息
jstack 41565 > ~/jstack.txt
5. ...
原创转载请注明出处:https://agilestyle.iteye.com/blog/2439722
-gc
-gcutil
Demo
jstat -gc 41565 2000
jstat -gcutil 41565 2000
jstat reference
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
https://www.cnblogs.com/yjd_hycf_space/p/7755633.html
设计模式分类
- 博客分类:
- Design Pattern
原创转载请注明出处:https://agilestyle.iteye.com/blog/2439168
设计模式分类:
创建型模式
结构型模式
行为型模式
Lombok Test
- 博客分类:
- CommonUtils
原创转载请注明出处:https://agilestyle.iteye.com/blog/2439069
Maven Dependency
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
src
Person.java
package org.fool ...