0%

基本概念

线程与进程

进程

  1. 用来加载指令、管理内存、管理IO、磁盘读写
  2. 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
  3. 进程就可以视为程序的一个实例比如java.exe

线程

  1. 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行
  2. 在一个进程里可以创建多个线程,一个标准的线程包括线程ID,当前指令指针(PC),寄存器集合和堆栈组成,堆中的内容可共享。处理器在这些线程上高速切换(涉及到上下文切换),让使用者感觉到这些线程在同时执行。如果没有明确的协同机制,线程将彼此独立执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
  3. 线程是进程的一个实体(一个进程包含多个进程),是被系统独立调度和分配的最小单元,,也叫轻量级线程(Light Weight Process),并且线程拥有独立的资源包括:栈、线程ID、寄存器和指令指针,其他堆中的资源在内存中共享。共享资源在并发编程中需要增加同步机制防止资源数据处理不对。
  4. 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。
  5. 线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
阅读全文 »

基本概念

  1. 作用:屏蔽各种硬件和操作系统内存的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果,定义了Java虚拟机与计算机内存是如何协同工作的,是一种主存与工作内存的抽象概念,并且底层对应CPU的寄存器、缓存、硬件内存以及CPU指令优化等
  2. 简称:Java Memory Model简称JMM
  3. 目的:定义程序中各个变量的访问规则,以及在必须时如何同步地访问共享变量,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节
阅读全文 »

上线文切换

巧妙地利用了时间片轮转的方式, CPU 给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一任务,任务的状态保存及再加载, 这段过程就叫做上下文切换。时间片轮转的方式使多个任务在同一颗 CPU 上执行变成了可能。

阅读全文 »

简介

  1. 开源分布式协调框架
  2. 为分布式应用提供一致性服务,作为整个大数据体系的管理员,包括服务发现、分布式锁、分布式领导选举、配置管理等
  3. Zookeeper = 文件系统(类似于Linux文件系统的树形结构) + 监听通知机制
阅读全文 »

Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存是指 SqlSession 级别的缓存,当在同一个 SqlSession 中进行相同的 SQL 语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存 1024 条 SQL。二级缓存是指可以跨 SqlSession 的缓存。是 mapper 级别的缓存,对于 mapper 级别的缓存不同的 sqlsession 是可以共享的。

阅读全文 »

CPU使用率过高

在高负载情况下CPU持续使用率高一般没有问题,但是导致任务无法正常调度或者load持续增加就需要重点关注,并且定位具体原因。(一般计算密集型应用 CPU 使用率偏高 load 偏低,IO 密集型相反。

阅读全文 »

TCP协议说明

TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。

阅读全文 »

说明

内核中虚拟内存的统计信息,对于性能分析有很大益处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
nr_free_pages 24320
nr_alloc_batch 293
nr_inactive_anon 13215
nr_active_anon 58077
nr_inactive_file 148719
nr_active_file 172552
nr_unevictable 0
nr_mlock 0
nr_anon_pages 19933
# 映射到文件的页数
nr_mapped 8526
nr_file_pages 348571
# 脏页数
nr_dirty 16
# 会写页数
nr_writeback 0
nr_slab_reclaimable 17986
nr_slab_unreclaimable 2986
# 分配到页面的页数
nr_page_table_pages 1396
nr_kernel_stack 123
# 不稳定页数
nr_unstable 0
nr_bounce 0
nr_vmscan_write 0
nr_vmscan_immediate_reclaim 26
nr_writeback_temp 0
nr_isolated_anon 0
nr_isolated_file 0
nr_shmem 27300
nr_dirtied 8354426
nr_written 8097732
numa_hit 1187165492
numa_miss 0
numa_foreign 0
numa_interleave 12459
numa_local 1187165492
numa_other 0
workingset_refault 552268
workingset_activate 81267
workingset_nodereclaim 0
nr_anon_transparent_hugepages 47
nr_free_cma 0
nr_dirty_threshold 94636
nr_dirty_background_threshold 31545
# 从启动到现在读入的内存页数
pgpgin 3168538
# 从启动到现在换出的内存页数
pgpgout 49091671
# 从启动到现在读入的交换分区页数
pswpin 0
# 从启动到现在换出的交换分区页数
pswpout 0
# 从启动到现在dma存储区分配的页数
pgalloc_dma 3730811
# 从启动到现在dma32存储区分配的页数
pgalloc_dma32 1237816587
# 从启动到现在普通存储区分配的页数
pgalloc_normal 0
pgalloc_movable 0
# 从启动到现在释放的页数
pgfree 1241571794
# 从启动到现在激活的页数
pgactivate 2698296
# 从启动到现在去激活的页数
pgdeactivate 747037
# 从启动到现在二级页面错误数
pgfault 4099623847
# 从启动到现在一级页面错误数
pgmajfault 4447
pglazyfreed 0
# 从启动到现在DMA存储区再填充的页面数
pgrefill_dma 2398
pgrefill_dma32 778799
# 从启动到现在普通存储区填充的页数
pgrefill_normal 0
pgrefill_movable 0
pgsteal_kswapd_dma 6587
pgsteal_kswapd_dma32 1977434
pgsteal_kswapd_normal 0
pgsteal_kswapd_movable 0
pgsteal_direct_dma 0
pgsteal_direct_dma32 0
pgsteal_direct_normal 0
pgsteal_direct_movable 0
# 从启动到现在kswapd后台进程扫描的DMA存储区页面数
pgscan_kswapd_dma 6645
pgscan_kswapd_dma32 1992050
# 从启动到现在kswapd后台进程扫描的普通存储区页面数
pgscan_kswapd_normal 0
pgscan_kswapd_movable 0
# 从启动到现在DMA存储区被直接回收的页面数
pgscan_direct_dma 0
pgscan_direct_dma32 0
# 从启动到现在普通存储区被直接回收的页面数
pgscan_direct_normal 0
pgscan_direct_movable 0
pgscan_direct_throttle 0
zone_reclaim_failed 0
# kswapd 之外其他线程在回收过程中,因为回收 inode 而释放的 pagecache page 个数(累计值)
pginodesteal 0
# 从启动到现在被扫描的切片数
slabs_scanned 1120768
# 在kswapd回收的过程中,因为回收inode而释放的 pagecache page 个数(累计值)
kswapd_inodesteal 105460
kswapd_low_wmark_hit_quickly 47
kswapd_high_wmark_hit_quickly 198
# 从启动到现在通过kswapd调用来回收的页面数
pageoutrun 563
# 从启动到现在请求直接回收的页面数
allocstall 0
# 从启动到现在轮换的页面数
pgrotated 24
drop_pagecache 0
drop_slab 0
numa_pte_updates 0
numa_huge_pte_updates 0
numa_hint_faults 0
numa_hint_faults_local 0
numa_pages_migrated 0
pgmigrate_success 0
pgmigrate_fail 0
compact_migrate_scanned 0
compact_free_scanned 0
compact_isolated 0
compact_stall 0
compact_fail 0
compact_success 0
htlb_buddy_alloc_success 129
htlb_buddy_alloc_fail 0
unevictable_pgs_culled 0
unevictable_pgs_scanned 0
unevictable_pgs_rescued 0
unevictable_pgs_mlocked 0
unevictable_pgs_munlocked 0
unevictable_pgs_cleared 0
unevictable_pgs_stranded 0
thp_fault_alloc 5482
thp_fault_fallback 345
thp_collapse_alloc 606
thp_collapse_alloc_failed 48146
thp_split 180
thp_zero_page_alloc 2
thp_zero_page_alloc_failed 0
balloon_inflate 0
balloon_deflate 0
balloon_migrate 0
swap_ra 0
swap_ra_hit 0

参考

  1. /proc/vmstat帮助手册