当前位置: 首页 > 编程日记 > 正文

Linux 的内存管理工具和调优参数

1. free
2. top
3. vmstat
4. slabtop;
5. pmap
6. dmesg
7. /proc/meminfo
8. /proc/sys/vm 目录下的文件
9. sync
10./proc/zoneinfo

11./proc/pagetypeinfo

查看内存工具:

1.free
free - Display amount of free and used memory in the system
root@ubuntu:/home/ricky# free -h
total used free shared buffers cached
Mem: 2.0G 712M 1.3G 7.3M 43M 296M
-/+ buffers/cache: 371M 1.6G
Swap: 2.0G 0B 2.0G


//shared: 共享内存
//buffers: block buffers
//cached: page cache

2.top
top - 05:49:21 up 18 min, 2 users, load average: 0.07, 0.18, 0.30
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.4 us, 6.0 sy, 0.9 ni, 87.0 id, 3.6 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 2063844 total, 1093352 used, 970492 free, 134932 buffers
KiB Swap: 2094076 total, 0 used, 2094076 free. 519908 cached Mem


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4068 root 20 0 5424 1332 988 R 11.9 0.1 0:00.03 top
1065 root 20 0 181812 37872 17900 S 6.0 1.8 0:25.80 Xorg
1 root 20 0 4600 2584 1444 S 0.0 0.1 0:03.88 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.43 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 S 0.0 0.0 0:04.06 rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root rt 0 0 0 0 S 0.0 0.0 0:00.85 migration/0
10 root rt 0 0 0 0 S 0.0 0.0 0:00.86 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 0:00.18 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:00.14 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.26 ksoftirqd/1
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H


top是可交互的命令工具
按下A/M/N/P/T可以进行排序,如下:
SORTING of task window
For compatibility, this top supports most of the former top sort keys. Since this is primarily a service to former top
users, these commands do not appear on any help screen.
command sorted-field supported
A start time (non-display) No
M %MEM Yes
N PID Yes
P %CPU Yes
T TIME+ Yes
按下f键(Fields)可以打开或者关闭指定的列,如下,


Fields Management for window 1:Def, whose current sort field is TIME+
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!


* PID = Process Id ENVIRON = Environment vars
* USER = Effective User Name vMj = Major Faults delta
* PR = Priority vMn = Minor Faults delta
* NI = Nice Value USED = Res+Swap Size (KiB)
* VIRT = Virtual Image (KiB) nsIPC = IPC namespace Inode
* RES = Resident Size (KiB) nsMNT = MNT namespace Inode
* SHR = Shared Memory (KiB) nsNET = NET namespace Inode
* S = Process Status nsPID = PID namespace Inode
* %CPU = CPU Usage nsUSER = USER namespace Inode
* %MEM = Memory Usage (RES) nsUTS = UTS namespace Inode
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = Real User Name
SUID = Saved User Id
SUSER = Saved User Name
GID = Group Id
GROUP = Group Name
PGRP = Process Group Id
TTY = Controlling Tty
TPGID = Tty Process Grp Id
SID = Session Id
nTH = Number of Threads
P = Last Used Cpu (SMP)
TIME = CPU Time
SWAP = Swapped Size (KiB)
CODE = Code Size (KiB)
DATA = Data+Stack (KiB)
nMaj = Major Page Faults
nMin = Minor Page Faults
nDRT = Dirty Pages Count
WCHAN = Sleeping in Function
Flags = Task Flags <sched.h>
CGROUPS = Control Groups
SUPGIDS = Supp Groups IDs
SUPGRPS = Supp Groups Names
TGID = Thread Group Id

其中如下几个filed 与内存有关。
SWAP = Swapped Size (KiB)
CODE = Code Size (KiB)
DATA = Data+Stack (KiB)
nMaj = Major Page Faults
nMin = Minor Page Faults
nDRT = Dirty Pages Count

page fault 又分为几种,major page fault、 minor page fault、 invalid(segment fault)。
major page fault也称为hard page fault, 指需要访问的内存不在虚拟地址空间,也不在物理内存中,需要从慢速设备载入。从swap回到物理内存也是hard page fault。
minor page fault也称为soft page fault, 指需要访问的内存不在虚拟地址空间,但是在物理内存中,只需要MMU建立物理内存和虚拟地址空间的映射关系即可。
(通常是多个进程访问同一个共享内存中的数据,可能某些进程还没有建立起映射关系,所以访问时会出现soft page fault)
invalid fault也称为segment fault, 指进程需要访问的内存地址不在它的虚拟地址空间范围内,属于越界访问,内核会报segment fault错误。


3.vmstat
vmstat - Report virtual memory statistics
root@ubuntu:/home/ricky# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 980532 134948 520236 0 0 34 10 41 70 1 1 98 0 0



Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)


Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).



4. slabtop
slabtop - display kernel slab cache information in real time
/proc/slabinfo

Active / Total Objects (% used) : 350745 / 352998 (99.4%)
Active / Total Slabs (% used) : 7986 / 7986 (100.0%)
Active / Total Caches (% used) : 67 / 96 (69.8%)
Active / Total Size (% used) : 59301.82K / 59760.34K (99.2%)
Minimum / Average / Maximum Object : 0.01K / 0.17K / 8.00K


OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
70944 70944 100% 0.12K 2217 32 8868K dentry
62342 62342 100% 0.05K 854 73 3416K buffer_head
40742 40742 100% 0.61K 1567 26 25072K ext4_inode_cache
34752 34483 99% 0.06K 543 64 2172K kmalloc-64
21252 21156 99% 0.09K 506 42 2024K kmalloc-96
19840 18831 94% 0.03K 155 128 620K kmalloc-32
19456 19456 100% 0.03K 152 128 608K ext4_extent_status
13568 13568 100% 0.02K 53 256 212K kmalloc-16
10212 10212 100% 0.34K 444 23 3552K inode_cache
8704 8704 100% 0.03K 68 128 272K anon_vma
7875 7745 98% 0.19K 375 21 1500K kmalloc-192
7168 7168 100% 0.01K 14 512 56K kmalloc-8
6205 6205 100% 0.05K 73 85 292K Acpi-State
5772 5772 100% 0.30K 222 26 1776K radix_tree_node
4420 4420 100% 0.02K 26 170 104K nsproxy
3654 3598 98% 0.37K 174 21 1392K proc_inode_cache



5. pmap
pmap - report memory map of a process
root@ubuntu:/home/ricky/code# pmap 5162
5162: ./a.out
08048000 4K r-x-- a.out
08049000 4K r---- a.out
0804a000 4K rw--- a.out
b756a000 408K rw--- [ anon ]
b75d0000 1700K r-x-- libc-2.19.so
b7779000 8K r---- libc-2.19.so
b777b000 4K rw--- libc-2.19.so
b777c000 12K rw--- [ anon ]
b7794000 8K rw--- [ anon ]
b7796000 4K r-x-- [ anon ]
b7797000 128K r-x-- ld-2.19.so
b77b7000 4K r---- ld-2.19.so
b77b8000 4K rw--- ld-2.19.so
bfdaf000 132K rw--- [ stack ]
total 2424K


6.dmesg
dmesg - print or control the kernel ring buffer
显示内核启动的日志 - 内存相关log:
1 [ 0.000000] PERCPU: Embedded 14 pages/cpu @f7b82000 s36096 r0 d21248 u57344
2 [ 0.000000] pcpu-alloc: s36096 r0 d21248 u57344 alloc=14*4096
3 [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 [0] 4 [0] 5 [0] 6 [0] 7
4 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 522373
5 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.13.0-32-generic root=UUID=80483beb-4610-4202-8e4f-6e3774c72ce6 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
6 [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
7 [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
8 [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
9 [ 0.000000] Initializing CPU#0
10 [ 0.000000] xsave: enabled xstate_bv 0x3, cntxt size 0x240
11 [ 0.000000] allocated 4194296 bytes of page_cgroup
12 [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
13 [ 0.000000] Initializing HighMem for node 0 (00037bfe:00080000)
14 [ 0.000000] Memory: 2044664K/2096628K available (6528K kernel code, 639K rwdata, 2760K rodata, 872K init, 924K bss, 51964K reserved, 1183624K highmem)
15 [ 0.000000] virtual kernel memory layout:
16 [ 0.000000] fixmap : 0xfff14000 - 0xfffff000 ( 940 kB)
17 [ 0.000000] pkmap : 0xffc00000 - 0xffe00000 (2048 kB)
18 [ 0.000000] vmalloc : 0xf83fe000 - 0xffbfe000 ( 120 MB)
19 [ 0.000000] lowmem : 0xc0000000 - 0xf7bfe000 ( 891 MB)
20 [ 0.000000] .init : 0xc19b4000 - 0xc1a8e000 ( 872 kB)
21 [ 0.000000] .data : 0xc1660532 - 0xc19b3e80 (3406 kB)
22 [ 0.000000] .text : 0xc1000000 - 0xc1660532 (6529 kB)


7. cat /proc/meminfo
root@ubuntu:/proc# cat meminfo
MemTotal: 2063844 kB
MemFree: 746660 kB
Buffers: 138740 kB
Cached: 656536 kB
SwapCached: 0 kB
Active: 763260 kB
Inactive: 446108 kB
Active(anon): 415072 kB
Inactive(anon): 10880 kB
Active(file): 348188 kB
Inactive(file): 435228 kB
Unevictable: 32 kB
Mlocked: 32 kB
HighTotal: 1183624 kB
HighFree: 489896 kB
LowTotal: 880220 kB
LowFree: 256764 kB
SwapTotal: 2094076 kB
SwapFree: 2094076 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 414204 kB
Mapped: 155944 kB
Shmem: 11864 kB
Slab: 61084 kB
SReclaimable: 45424 kB
SUnreclaim: 15660 kB
KernelStack: 3160 kB
PageTables: 7428 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3125996 kB
Committed_AS: 2766012 kB
VmallocTotal: 122880 kB
VmallocUsed: 23744 kB
VmallocChunk: 61636 kB
HardwareCorrupted: 0 kB
AnonHugePages: 186368 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 28664 kB
DirectMap2M: 884736 kB


CommitLimit:CommitLimit
可以参考:
http://www.firefoxbug.com/index.php/archives/2800/


8. /proc/sys/vm 目录下的文件
root@ubuntu:/proc/sys/vm# ll
total 0
dr-xr-xr-x 1 root root 0 Jun 10 05:31 ./
dr-xr-xr-x 1 root root 0 Jun 10 05:31 ../
-rw-r--r-- 1 root root 0 Jun 10 09:18 admin_reserve_kbytes
-rw-r--r-- 1 root root 0 Jun 10 09:18 block_dump
--w------- 1 root root 0 Jun 10 09:18 compact_memory
-rw-r--r-- 1 root root 0 Jun 10 09:18 dirty_background_bytes
-rw-r--r-- 1 root root 0 Jun 10 05:32 dirty_background_ratio
-rw-r--r-- 1 root root 0 Jun 10 09:18 dirty_bytes
-rw-r--r-- 1 root root 0 Jun 10 09:18 dirty_expire_centisecs
-rw-r--r-- 1 root root 0 Jun 10 05:32 dirty_ratio
-rw-r--r-- 1 root root 0 Jun 10 05:32 dirty_writeback_centisecs
-rw-r--r-- 1 root root 0 Jun 10 09:18 drop_caches
-rw-r--r-- 1 root root 0 Jun 10 09:18 extfrag_threshold
-rw-r--r-- 1 root root 0 Jun 10 09:18 highmem_is_dirtyable
-rw-r--r-- 1 root root 0 Jun 10 09:18 hugepages_treat_as_movable
-rw-r--r-- 1 root root 0 Jun 10 09:18 hugetlb_shm_group
-rw-r--r-- 1 root root 0 Jun 10 05:32 laptop_mode
-rw-r--r-- 1 root root 0 Jun 10 09:18 legacy_va_layout
-rw-r--r-- 1 root root 0 Jun 10 09:18 lowmem_reserve_ratio
-rw-r--r-- 1 root root 0 Jun 10 09:18 max_map_count
-rw-r--r-- 1 root root 0 Jun 10 09:18 memory_failure_early_kill
-rw-r--r-- 1 root root 0 Jun 10 09:18 memory_failure_recovery
-rw-r--r-- 1 root root 0 Jun 10 09:18 min_free_kbytes
-rw-r--r-- 1 root root 0 Jun 10 05:31 mmap_min_addr
-rw-r--r-- 1 root root 0 Jun 10 09:18 nr_hugepages
-rw-r--r-- 1 root root 0 Jun 10 09:18 nr_overcommit_hugepages
-r--r--r-- 1 root root 0 Jun 10 09:18 nr_pdflush_threads
-rw-r--r-- 1 root root 0 Jun 10 09:18 oom_dump_tasks
-rw-r--r-- 1 root root 0 Jun 10 09:18 oom_kill_allocating_task
-rw-r--r-- 1 root root 0 Jun 10 05:31 overcommit_memory
-rw-r--r-- 1 root root 0 Jun 10 09:18 overcommit_ratio
-rw-r--r-- 1 root root 0 Jun 10 09:18 page-cluster
-rw-r--r-- 1 root root 0 Jun 10 09:18 panic_on_oom
-rw-r--r-- 1 root root 0 Jun 10 09:18 percpu_pagelist_fraction
-rw-r--r-- 1 root root 0 Jun 10 09:18 scan_unevictable_pages
-rw-r--r-- 1 root root 0 Jun 10 09:18 stat_interval
-rw-r--r-- 1 root root 0 Jun 10 09:18 swappiness
-rw-r--r-- 1 root root 0 Jun 10 09:18 user_reserve_kbytes
-rw-r--r-- 1 root root 0 Jun 10 09:18 vdso_enabled
-rw-r--r-- 1 root root 0 Jun 10 09:18 vfs_cache_pressure


解释:
swappiness:
(0~100), 该值越高则linux越倾向于将部分长期没有用到的页swap到交换磁盘。
swappiness=0,不会交换匿名页面到交换磁盘,除非系统内存非常低
swappiness=100, 内核积极回收匿名页面。


panic_on_oom:
用于控制如何处理out-of-memory,可选值包括0/1/2
0:当内存不足时内核调用OOM killer杀死一些rogue进程,每个进程描述符都有一个oom_score标示,oom killer会选择oom_score较大的进程
1:发生了OOM以后,如果有mempolicy/cpusets的进程限制,而这些nodes导致了内存问题的时候,OOM Killer会干掉这些中的一个,系统也会恢复
2:OOM后必然panic
备注:每个进程有一个oom_score_adj (取值范围:-1000 - 1000)与此参数有关,-1000表示不会被oom killer选中。
旧版本中用的是oom_adj(-17,15),不过oom_adj逐渐会被oom_score_adj 取代。
比如:
cat /proc/<pid>/oom_score_adj


如下链接非常重要:
https://www.cnblogs.com/tolimit/p/5065761.html
admin_reserve_kbytes:给有cap_sys_admin权限的用户保留的内存数量(默认值是 min(free_page * 0.03, 8MB))


drop_caches:
写入数值可以使内核释放page_cache,dentries和inodes缓存所占的内存。
1:只释放page_cache
2:只释放dentries和inodes缓存
3:释放page_cache、dentries和inodes缓存


oom_dump_tasks
如果启用,在内核执行OOM-killing时会打印系统内进程的信息(不包括内核线程),信息包括pid、uid、tgid、vm size、rss、nr_ptes,swapents,oom_score_adj和进程名称。这些信息可以帮助找出为什么OOM killer被执行,找到导致OOM的进程,以及了解为什么进程会被选中。
0:不打印系统内进程信息
1:打印系统内进程信息


memory_failure_early_kill:
控制发生某个内核无法处理的内存错误发生的时候,如何去杀掉这个进程。当这些错误页有swap镜像的时候,内核会很好的处理这个错误,不会影响任何应用程序,但是如果没有的话,内核会把进程杀掉,避免内存错误的扩大
1:在发现内存错误的时候,就会把所有拥有此内存页的进程都杀掉
0:只是对这部分页进行unmap,然后把第一个试图进入这个页的进程杀掉
memory_failure_recovery:
是否开启内存错误恢复机制
1:开启
0:一旦出现内存错误,就panic


https://blog.csdn.net/joyeu/article/details/20063429
min_free_kbytes:代表系统所保留空闲内存的最低限,在系统初始化时会根据内存大小计算一个默认值,计算规则是:
min_free_kbytes = sqrt(lowmem_kbytes * 16) = 4 * sqrt(lowmem_kbytes)(注:lowmem_kbytes即可认为是系统内存大小)
min_free_kbytes的主要用途是计算影响内存回收的三个参数 watermark[min/low/high]
三个watermark的计算方法:
watermark[min] = min_free_kbytes换算为page单位即可,假设为min_free_pages。
因为是每个zone各有一套watermark参数,实际计算效果是根据各个zone大小所占内存总大小的比例,而算出来的per zone min_free_pages)
watermark[low] = watermark[min] * 5 / 4
watermark[high] = watermark[min] * 3 / 2


https://blog.csdn.net/joyeu/article/details/20063429
lowmem_reserve_ratio
1.作用
除了min_free_kbytes会在每个zone上预留一部分内存外,lowmem_reserve_ratio是在各个zone之间进行一定的防卫预留,主要是防止高端zone在没内存的情况下过度使用低端zone的内存资源。
例如现在常见的一个node的机器有三个zone: DMA,DMA32和NORMAL。DMA和DMA32属于低端zone,内存也较小,如96G内存的机器两个zone总和才1G左右,NORMAL就相对属于高端内存(现在一般没有HIGH zone),而且数量较大(>90G)。低端内存有一定的特殊作用比如发生DMA时只能分配DMA zone的低端内存,因此需要在 尽量可以使用高端内存时 而 不使用低端内存,同时防止高端内存分配不足的时候抢占稀有的低端内存



http://www.firefoxbug.com/index.php/archives/2800/
overcommit_memory:
0 — 默认设置。个人理解:当应用进程尝试申请内存时,内核会做一个检测。内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。举个例子,比如1G的机器,A进程已经使用了500M,当有另外进程尝试malloc 500M的内存时,内核就会进行check,发现超出剩余可用内存,就会提示失败。
1 — 对于内存的申请请求,内核不会做任何check,直到物理内存用完,触发OOM杀用户态进程。同样是上面的例子,1G的机器,A进程500M,B进程尝试malloc 500M,会成功,但是一旦kernel发现内存使用率接近1个G(内核有策略),就触发OOM,杀掉一些用户态的进程(有策略的杀)。
2 — 当请求申请的内存 >= SWAP内存大小 + 物理内存 * N,则拒绝此次内存申请。
解释下这个N:N是一个百分比,根据overcommit_ratio/100来确定,比如overcommit_ratio=50,那么N就是50%。
overcommit_ratio:
只有当vm.overcommit_memory = 2的时候才会生效,内存可申请内存为
SWAP内存大小 + 物理内存 * overcommit_ratio/100


percpu_pagelist_fraction:
每个CPU能从每个zone所能分配到的pages的最大值(单位每个zone的1/X),0为不限制


9. sync
NAME
sync - flush file system buffers
DESCRIPTION
Force changed blocks to disk, update the super block.

11./proc/pagetypeinfo
root@ubuntu:/usr/local# cat /proc/pagetypeinfo
Page block order: 9
Pages per block: 512


Free pages count per migrate type at order 0 1 2 3 4 5 6 7 8 9 10
Node 0, zone DMA, type Unmovable 1 1 3 0 0 1 0 0 0 0 0
Node 0, zone DMA, type Reclaimable 1 1 0 0 0 1 1 0 1 1 0
Node 0, zone DMA, type Movable 2 1 1 0 0 1 0 1 1 0 0
Node 0, zone DMA, type Reserve 0 0 0 0 0 0 0 0 0 1 0
Node 0, zone DMA, type CMA 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone DMA, type Isolate 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone Normal, type Unmovable 7 1 0 0 3 7 12 9 3 0 0
Node 0, zone Normal, type Reclaimable 1 1 3 2 2 0 1 0 0 1 0
Node 0, zone Normal, type Movable 136 90 63 13 1 0 7 3 2 0 78
Node 0, zone Normal, type Reserve 0 0 0 0 0 0 0 0 0 0 1
Node 0, zone Normal, type CMA 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone Normal, type Isolate 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone HighMem, type Unmovable 0 1 0 7 21 11 8 8 2 2 2
Node 0, zone HighMem, type Reclaimable 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone HighMem, type Movable 27 27 42 13 24 8 5 2 3 5 148
Node 0, zone HighMem, type Reserve 0 0 0 0 0 0 0 0 0 0 1
Node 0, zone HighMem, type CMA 0 0 0 0 0 0 0 0 0 0 0
Node 0, zone HighMem, type Isolate 0 0 0 0 0 0 0 0 0 0 0


Number of blocks type Unmovable Reclaimable Movable Reserve CMA Isolate
Node 0, zone DMA 1 2 4 1 0 0
Node 0, zone Normal 44 24 368 2 0 0
Node 0, zone HighMem 23 0 555 1 0 0


12. oom killer
人为制造一个oom killer:
echo f > /proc/sysrq-trigger
另外,向sysrq写入命令的帮助文件如下,上例中写入的f: memory-full-oom-kill(f),也就是执行oom kill
SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)

相关文章:

java多线程查询_利用Java函数式接口处理多线程查询

Java函数式接口有且只有一个抽象方法的接口被称为函数式接口.FunctionalInterface注解: 该注解可用于一个接口的定义上, 一旦使用该注解来定义接口, 编译器将会强制检查该接口是否确实有且仅有一个抽象方法, 否则将会报错.该注解不是必须的, 只要符合函数式接口的定义,那么这个…

奇妙的算法之LCS妙解

LCS算法妙解 LCS问题简述&#xff1a;最长公共子序列 一个数列 S&#xff0c;如果分别是两个或多个已知数列的子序列&#xff0c;且是所有符合此条件序列中最长的&#xff0c;则S 称为已知序列的最长公共子序列。 LCS问题的分支&#xff1a;最长公共子串与最长公共子序列 子串&…

关于PreferenceActivity的使用和一些问题的解决(自己定义Title和取值)

android的Setting往往用PreferenceActivity来写的 我们在建立layout文件: <PreferenceScreen xmlns:android"http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title"常规设置" android:key"set_local">&…

python学习-25 函数递归

递归 例如&#xff1a; def abc(n):print(n)if int(n/2) 0:return nreturn abc(int(n/2))abc(10) 运行结果&#xff1a; 10 5 2 1Process finished with exit code 0 2.小程序实例 import time people_list [小明,小红,小刚,小王,小青]def ask(people_list):if len(people_li…

二维指针删除单向链表

Linus slashdot: https://meta.slashdot.org/story/12/10/11/0030249 原文&#xff1a; https://coolshell.cn/articles/8990.html Linus大婶在slashdot上回答一些编程爱好者的提问&#xff0c;其中一个人问他什么样的代码是他所喜好的&#xff0c;大婶表述了自己一些观点…

对比java_java集合对比

list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口&#xff0c;Map则不是2、List特点&#xff1a;元素有放入顺序&#xff0c;元素可重复 &#xff0c;Set特点&#xff1a;元素无放入顺序&#xff0c;元素不可重复&#xff0c;重复元素会覆盖掉&#xff0c;(注…

.ARM.exidx

简介&#xff1a; .ARM.exidx is the section containing information for unwinding the stack. If your C program has functions that print out a stack backtrace, the functions will likely depend on this section being present. 相关的编译选项 -funwind-tables 二问…

Oracle VM VirtualBox安裝Windows 2000失败

问题&#xff1a;VirtualBox下安装Windows2000&#xff0c;设置网络后进入最后一步&#xff0c;复制组件……然后就是重启&#xff1b;再试还是重启&#xff01;解决&#xff1a;在Oracle网站上查了一下资料&#xff1a;http://www.virtualbox.org/manual/ch12.html#idp1278616…

用户/目录操作

用户操作 useradd/adduser 创建用户 passwd 修改用户密码 userdel 删除用户 usermod 修改用户信息 -g<群组> 修改用户所属群组 -G<群组> 修改用户所属的附加群组 -l<帐户名> 修改账户名称 -u 修改用户ID -L锁定用户密码 -U 解除密码锁定 adduser -u用…

linux内核 -内存管理模块概图

1.从进程(task)的角度来看内存管理 每个进程对应一个task_struct;每个task_struct 里面包含指向mm_struct 的指针mm, mm_struct 里面的主要成员&#xff1a; a. 指向vma链表的头指针&#xff1a;mmap b. 指向vma红黑树的根节点: mm_rb c. 指向进程列表的指针pgb;vma(vm_are…

求一个字符串中连续出现的次数最多的子串

求一个字符串中连续出现的次数最多的子串。例如字符串“abababc”,最多连续出现的为ab&#xff0c;连续出现三次。要和求一个字符串中的最长重复子串区分开来&#xff0c;还是上面的字符串&#xff0c;那么最长的重复子串为abab。两个题目的解法有些类似&#xff0c;都用到了后…

java ftp 判断文件是否存在_FTP判断文件是否存在

FTP Client使用的是Apache Commons Net 3.3/*** 检查FTP上指定文件是否存在* param remoteFilePartNameList 文件路径* throws BusinessException* throws IOException*/private void checkFtpFileExist(List remoteFilePartNameList) throws BusinessException, IOException {…

软件定义光网络-SDON

为什么80%的码农都做不了架构师&#xff1f;>>> 软件定义光网络-SDON 随着宽带业务与应用的持续增长&#xff0c;光网络面临着新的发展机遇与技术挑战。作为当前业界研究热点之一&#xff0c;SDON聚焦于将软件定义技术融入光网络的综合解决方案&#xff0c;其关键技…

记录一次爬取某昵称网站的爬虫

同学跑去实习了...然后工作的时候要她用python写一个爬虫&#xff0c;爬取一万个可以用的用户昵称。&#xff08;为什么他们都能找到工作啊QAQ&#xff09; 然后&#xff0c;她找到了我...然后在我动笔的时候&#xff0c;发现之前写过的爬虫基本上忘完了...无奈下只好对着以前…

《LINUX3.0内核源代码分析》第一章:内存寻址

https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要&#xff1a;本章主要介绍了LINUX3.0内存寻址方面的内容&#xff0c;重点对follow_page函数进行注释&#xff0c;以帮助读者大致了解ARM A9的页表组织。 读者需要理解一些基本概念&#xff1a;虚拟地址、物理地…

java integer int 比较_java Integer和int之间的比较问题是什么?

展开全部java Integer和int之间e68a84e8a2ad3231313335323631343130323136353331333365633864的比较问题。求解释public static void main(String[] args) { // TODO Auto-generated method stub Integer a new Integer(1); Integer b new Integer(1); int c1; Integer e 1;…

Oracle 12C -- 基于sequence的列的默认值

12C支持先创建一个sequence&#xff0c;然后再将该sequence指定为某个列的值的默认表达式。 和"identity column"具有以下不同点&#xff1a; 对列的个数没有限制 sequence必须在列定义之前定义 如果删除了sequence&#xff0c;会导致后面的insert报错 表的owner&…

Python的XML-RPC学习

编写客户端提交数据到服务器处理是程序员最常碰到的几个问题之一。各种不同的语言对此都有相应的解决方案。比如Unix下&#xff0c;C程序员们可以用SUNRPC&#xff0c;Java程序员则使用RMI来处理。大多数语言还都可以使用Web Service或者ICE。它们的使用方法类似&#xff0c;编…

Anaconda安装,jupyter notebook 使用说明

conda install pandas---安装pandas包 conda remove package_names conda update package_names conda list ---列出该环境下安装的package conda install nb_conda --------安装nb_conda用于notebook自动关联nb_conda的环境 conda create -n env_name package_name -------…

ARM32页表-虚拟地址到物理地址的转换

ARM32的页表 页表就是用于将虚拟地址转换为物理地址的转换关系表。访问虚拟地址时&#xff0c;计算机通过页表找到对应的实际物理地址访问。 我们在上一节介绍了内存管理模块概图, 怎么完成从pgd 到 page的转化呢&#xff1f; linux 内核code是通过follow_page来完成的…

java 重载 参数子类_java - Java中带有子类参数的函数重载 - 堆栈内存溢出

这个问题已经在这里有了答案&#xff1a;我有一个扩展了另一个类的类(在这种情况下&#xff0c;这是一个例外)&#xff1a;public class NewTypeException extends Exception {private String exceptionField;public String getExceptionField() {return exceptionField;}publi…

Caused by: java.sql.BatchUpdateException

Caused by: java.sql.BatchUpdateException: Table (%s) has been dropped, altered or renamed.解决方法重启项目转载于:https://www.cnblogs.com/mySummer/p/4723561.html

do{ ...}while(0)应用技巧

辅助定义复杂的宏example: #define A(args) do { a(args); b() } while(0);如果定义#define A(args) a(args);b();if(i > 0) A(i) if(i > 0 )do { a(2);b();} while(0) 或者while(1)a(args);b(); 这不是我们想要的&#xff0c;因为第二个b();不会被执行。代替g…

Idea--使用Idea调试设置

参考 https://blog.csdn.net/yyjava/article/details/81453748 关闭一些Idea默认设置&#xff0c;否则懵逼到爆炸.. 1.关闭集合类视图 2.关闭watch视窗默认调用toString&#xff08;真的很懵逼&#xff01;&#xff01;&#xff09; 转载于:https://www.cnblogs.com/microcat/p…

基于i2c子系统的驱动分析

https://blog.csdn.net/qq_28992301/article/details/52467766

creo JAVA_Creo 4.0二次开发工具框架搭建

一、新建MFC DLL工程二、配置项目属性附加依赖项中输入&#xff1a;netapi32.lib;psapi.lib;mpr.lib;wsock32.lib;protk_dll_NU.lib;protk_dllmd_NU.lib;protkmd_NU.lib;protoolkit_NU.lib;pt_asynchronous.lib;ptasyncmd.lib;ucore.lib;udata.lib;尝试编译工程&#xff0c;如果…

html5 FileReader初识

使用html5的FileReader可以实现多媒体文件的预览功能&#xff0c;代码如下&#xff1a; <html> <head> <script type"text/javascript"> var fileReader new FileReader(); fileReader.onload function(event) {document.getElementById(image).…

puppet aix之自动化用户管理

一、 用户组的管理 (一) Puppet组管理特性 1. manages_aix_lam用来管理AIX的LAM(Loadable Authentication Module)系统。 2. manages_members对于目录服务是组属性成员&#xff0c;而不是用户。 3. system_groups用来允许你创建比较小GID的系统组&#xff0c;一般小…

C# 文件操作

C# 文件操作文件操作: 检查 创建 读取 写入 修改 删除目录操作: 检查 创建 读取 写入 修改 删除文件操作 若要执行此操作...请参阅本主题中的示例...创建文本文件向文件写入文本写入文本文件向文件写入文本读取文本文件从文件读取文本向文件中追加文本File.AppendText FileInfo…

一种内存池管理技术

本文介绍一种内存池管理技术。 在m公司工作了4年多&#xff0c;一直负责内存池模块问题的处理&#xff0c;比如内存越界&#xff0c;data abort 系统异常的处理&#xff0c;本文加以总结&#xff0c;以便后续参考。 读本文之前&#xff0c;先有个约定&#xff0c;本文中提到的p…