一文搞懂linux的proc文件

news2024/11/16 1:57:37

 

目录

proc文件夹是干嘛用?

proc下都有什么系统信息?

 /proc/bus

/proc/buddyinfo

/proc/cgroups       

/proc/cmdline

/proc/consoles

/proc/cpuinfo

/proc/crypto

/proc/devices

/proc/diskstats

/proc/execdomains

/proc/fb

/proc/filesystems       

/proc/fs

/proc/inerrupts

/proc/iomem

/proc/ioports

/proc/irq

/proc/kallsyms

/proc/keys

/proc/key-users     

/proc/kmsg

/proc/kpagecgroup       

/proc/kpagecount

/proc/kpageflags

/proc/loadavg     

/proc/locks

/proc/mdstat

/proc/meminfo

/proc/misc

/proc/modules

/proc/mounts

/proc/net

/proc/pagetypeinfo

/proc/partitions

/proc/sched_debug

/proc/schedstat

/proc/scsi

/proc/slabinfo

/proc/softirqs

/proc/stat

/proc/swaps

/proc/sys     

/proc/sysrq-trigger

/proc/sysvipc

/proc/timer_list

/proc/timer_stats

/proc/tty

/proc/uptime

/proc/version

/proc/vmallocinfo

/proc/vmstat

/proc/zoneinfo

        最近由于定位问题,频繁查看一些proc的文件信息,所以索性就一文撸到底,把proc翻个底朝天吧。

proc文件夹是干嘛用?

        在linux系统/proc目录中一些文件,记录一些系统运行时的信息,比如内存信息、网络信息、cpu信息等,但是要注意的是,这个目录下并不是保存真正的文件或者目录,只是一个伪文件系统。它只是保存在内存中,不是持久化的文件。可以理解为内核开放的一个集中查询系统信息的地方,方便查找使用,符合linux文件系统的习惯。

proc下都有什么系统信息?

 /proc/bus

        bus下有两个目录

        input pci

Linux系统提供了 input 子系统,鼠标、键盘、触摸屏等设备都可以通过 input 接口函数来实现设备驱动

devices handlers

devices:注册的 input devices

handlers:注册的 input handlers

而 /proc/bus/input/devices 文件会记录已注册的 input 设备信息。可以使用 cat 命令直接查看该文件内容。其中devices里的信息如下:

I: Bus=0019 Vendor=0000 Product=0001 Version=0000

N: Name="Power Button"

P: Phys=PNP0C0C/button/input0

S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0

U: Uniq=

H: Handlers=kbd event0

B: PROP=0

B: EV=3

B: KEY=10000000000000 0

从内容来看,每个设备信息的内容都有 I、N、P、S、U、H、B 几个字段

I :设备ID(struct input_id)

N:设备名称【Name】

P:系统层次结构中设备的物理路径【Physical path】

S:系统文件路径【Sysfs path】

U:设备的唯一识别码,可以为空【Unique identification code】

H:与设备关联的输入句柄列表【Handles】

B:位掩码,以十六进制表示【Bitmasks】

        PROP:设备属性【Properties】

        EV :设备支持的事件类型【Events】

        KEY :设备拥有的键盘、按键

        MSC :设备支持的杂项事件

        LED :设备上的 LED

handlers的内容如下:

N: Number=0 Name=kbd

N: Number=1 Name=sysrq (filter)

N: Number=2 Name=mousedev Minor=32

N: Number=3 Name=evdev Minor=64

显示所有handlers的名称

pci中保存的为pci驱动相关信息, 由于系统下的文件较大, 不贴了,直接放字段解释:

每个PCI设备一行:

总共18个字段,每个字段之间是\t。

第一个字段是,总线设备功能,总线是前8位,后8位是设备(前5位)和功能(后3位)。

第二个字段是,vendor(前16位)和device(后16位)。

第三个字段是,中断号

第4-10个字段是bar0-bar6以及flag信息。

第11-17个字段是bar0-bar6的长度。

第18个字段是设备名称,optional

/proc/buddyinfo

        buddyinfo用于记录系统的内存资源。linux的内存系统使用buddy算法来管理内存以减少内存碎片的产生。buddy算法管理最小的单一为PAGE_SIZE,一般情况下大小为4K。以2的N次幂一次增加。

Node 0, zone DMA32 635 549 425 251 124 66 23 2 4 0 0 0 0 0

Node 0, zone Normal 2947 1489 456 145 347 146 49 24 16 5 2 0 0 0

/proc/cgroups       

        controller group,用来限制、记录、隔离进程组的物理资源,将任意进程进行分组化管理的Linux内核功能。cgroup本身提供将进程进行分组化管理的功能和接口的基础结构。实现 cgroups 的主要目的是为不同用户层面的资源管理提供一个统一化的接口。从单个任务的资源控制到操作系统层面的虚拟化,cgroups 提供了五大功能:

资源限制(Resource limiting ):比如memory子系统可以为进程组设定一个memory使用上限,进程组使用的内存达到限额再申请内存,就会出发OOM(out of memory)
优先级控制(Prioritization):比如可以使用cpu子系统为某个进程组分配cpu share
资源统计(Accounting ):比如使用cpuacct子系统记录某个进程组使用的cpu时间
进程组隔离(Isolation):比如使用ns子系统可以使不同的进程组使用不同的namespace,以达到隔离的目的,不同的进程组有各自的进程、网络、文件系统挂载空间
进程组控制(Control):比如使用freezer子系统可以将进程组挂起和恢复

#subsys_name    hierarchy       num_cgroups     enabled
cpuset  6       1       1
cpu     7       1       1
cpuacct 7       1       1
blkio   10      1       1
memory  9       175     1
devices 3       110     1
freezer 4       1       1
net_cls 2       1       1
perf_event      11      1       1
net_prio        2       1       1
hugetlb 12      1       1
pids    8       167     1
rdma    5       1       1
 cpu限制 CPU 时间片的分配,与 cpuacct 挂载在同一目录
cpuacct生成 cgroup 中的任务占用 CPU 资源的报告,与 cpu 挂载在同一目录
cpuset给 cgroup 中的任务分配独立的 CPU(多处理器系统) 和内存节点
 devices允许或禁止 cgroup 中的任务访问设备
 freezer暂停/恢复 cgroup 中的任务
 hugetlb限制使用的内存页数量
memory对 cgroup 中的任务的可用内存进行限制,并自动生成资源占用报告
net_cls使用等级识别符(classid)标记网络数据包,这让 Linux 流量控制器(tc 指令)可以识别来自特定 cgroup 任务的数据包,并进行网络限制
net_prio允许基于 cgroup 设置网络流量(netowork traffic)的优先级
 perf_event允许使用 perf 工具来监控 cgroup
 pids限制任务的数量
rdma限制进程对rdma和ib资源的使用。rdma作为host-offload、host-bypass技术,使低延迟、高带宽的直接内存到内存的数据通信成为可能。ib为新一代网络协议
 systemdsystemd 提供了 cgroups 的使用和管理接口,在系统的开机阶段,systemd 会把支持的 controllers (subsystem 子系统)挂载到默认的 /sys/fs/cgroup/ 目录下面

/proc/cmdline

        在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递

test@LAPTOP-D98HS8JP:/proc$ cat cmdline
BOOT_IMAGE=/kernel init=/init

/proc/consoles

        使用的控制台

ttyAMA0              -W- (EC p a)  114:64

/proc/cpuinfo

        记录设备的CPU信息

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 141
model name      : 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz
stepping        : 1
microcode       : 0xffffffff
cpu MHz         : 2688.000
cache size      : 1280 KB
physical id     : 0
siblings        : 12
core id         : 0
cpu cores       : 6
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 6
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave osxsave avx f16c rdrand lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl avx512vbmi umip pku avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid ibrs ibpb stibp ssbd
bogomips        : 5376.00
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

对此款芯片的简单总结:芯片型号是"Hygon C86 3135",拥有4个物理处理核,8个逻辑处理核(使用超线程技术),CPU主频是3499.941MHZ,二级缓存大小是512KB。
(1)processor :系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
(2)vendor_id :CPU制造商
(3)cpu family :CPU产品系列代号
(4)model   :CPU属于其系列中的哪一代的代号
(5)model name:CPU属于的名字及其编号、标称主频
(6)stepping  :CPU属于制作更新版本
(7)cpu MHz  :CPU的实际使用主频
(8)cache size :CPU二级缓存大小
(9)physical id :单个CPU的标号
(10)siblings :单个CPU逻辑物理核数
(11)core id :当前物理核在其所处CPU中的编号,这个编号不一定连续
(12)cpu cores :该逻辑核所处CPU的物理核数
(13)apicid :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
(14)fpu :是否具有浮点运算单元(Floating Point Unit)
(15)fpu_exception :是否支持浮点计算异常
(16)cpuid level :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
(17)wp :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
(18)flags :当前CPU支持的功能
(19)bogomips :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
(20)clflush size :每次刷新缓存的大小单位
(21)cache_alignment :缓存地址对齐单位
(22)address sizes :可访问地址空间位数
(23)power management :对能源管理的支持,有以下几个可选支持功能:

/proc/crypto

        系统上已安装的内核使用的密码算法及每个算法的详细信息列表

name : crc32

driver : crc32-pclmul

module : crc32-pclmul

priority : 250

refcnt : 1

selftest : passed

internal : yes

type : skcipher

blocksize : 16

digestsize: 4

/proc/devices

        字符装置(Character Device)和块装置(Block Device)的major number和名字。比如你知道一个device的major number和minor number,你就可以通过改device的major number在这个文件里面查到device的具体类型。

Character devices:

1 mem

4 /dev/vc/0

4 tty

4 ttyS

5 /dev/tty

5 /dev/console

5 /dev/ptmx

7 vcs

10 misc

13 input

Block devices:

8 sd

9 md

11 sr

65 sd

66 sd

67 sd

/proc/diskstats

        内核通过diskstats文件,将通用块设备层的一些重要指标以文件的形式呈现给用户,/proc/diskstats 文件中,包含了设备相关的信息,即磁盘相关的信息,以文件形式保存。

253 0 vda 1746168 36417 1176610770 181628087 21568405 976149 1056163141 327225581 0 108763630 475299800 0 0 0 0

253 1 vda1 115 226 14601 318 1 0 1 0 0 340 190 0 0 0 0

253 2 vda2 524 0 126308 3107 20 2 4452 166 0 1560 2500 0 0 0 0

253 3 vda3 1745491 36191 1176463845 181624445 14007587 976147 1056158688 324926062 1 91126960 473918270 0 0 0 0

253 16 vdb 10202124 4961 4884985263 375955447 23440092 766118 4433247734 605919961 0 111733750 909536000 0 0 0 0

253 17 vdb1 10202103 4961 4884981423 375955398 15879335 766118 4433247734 600854086 1 73556740 905749350 0 0 0 0

11 0 sr0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

252 0 dm-0 11923311 0 6052040092 559235180 38612989 0 5445892975 999320890 2 139854130 1558556070 0 0 0 0

252 1 dm-1 73372 0 9395456 1487730 607717 0 77787776 200728120 0 599140 202215850 0 0 0 0

vda:设备名。一般ide接口的以hd[a-d]口命名,scsi和sata接口的以sd[a-z]命名。

/proc/execdomains

内核当前支持的执行域(每种操作系统独特“个性”)信息列表

0-0 Linux [kernel]

/proc/fb

        可用的帧缓冲列表,包含帧缓冲设备的设备号和相关驱动信息

/proc/filesystems       

        当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型。

nodev sysfs

nodev rootfs

nodev ramfs

nodev bdev

nodev proc

nodev cpuset

/proc/fs

        包含了一些文件系统信息。比较有用的有/proc/fs/ext4目录,该目录下的每个subdirectory表示一个被挂载的device名字,device名字目录下还有mb_groupsoptions文件。

[test@myLinux fs]$ ls

aufs ext4 fscache jbd2 lockd nfs nfsd nfsfs xfs

/proc/inerrupts

        系统中断使用信息,X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号。

CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15
  2: 1017998324 3523442607 4209774678  111105660 3994378972 3926886470 3959970091 3993317757 4067035816 3806411631 4067614717 4021606034 4099769443 4048179032  103373262 4167652047     GICv3  27 Level     

/proc/iomem

        每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息,在 kernel/resource.c 中创建。

[test@myLinux proc]$ cat iomem
00000000-00000000 : LNRO0015:00
00000000-00000000 : LNRO0015:01
00000000-00000000 : ARMH0011:00
  00000000-00000000 : ARMH0011:00
00000000-00000000 : QEMU0002:00
  00000000-00000000 : fw_cfg_mem
00000000-00000000 : LNRO0005:00

/proc/ioports

        提供了当前注册的端口区域列表,用于与设备进行输入或输出通信,包含了kernel driver用request_region划定的IO ports 范围的列表。第一列是IO ports的范围,第二列是调用request_region的kernel driver名字。

[test@myLinux proc]$ cat ioports
00000000-00000000 : PCI Bus 0000:00
  00000000-00000000 : PCI Bus 0000:01
    00000000-00000000 : PCI Bus 0000:02
      00000000-00000000 : 0000:02:03.0
      00000000-00000000 : 0000:02:01.0
        00000000-00000000 : ahci
      00000000-00000000 : 0000:02:04.0
        00000000-00000000 : uhci_hcd
      00000000-00000000 : 0000:02:06.0
  00000000-00000000 : PCI Bus 0000:3f

        第一列给出了为第二列中列出的设备保留的 I/O 端口地址范围,I/O端口地址空间通常都比较小。CPU通过设立专门的IN和OUT指令来访问这一空间中的地址单元(即I/O端口)

/proc/irq

        中断系统子目录。每个注册的irq创建一个以irq编号为名字的子目录,每个子目录下分别有以下条目:

affinity_hint :只读条目,用于用户空间做irq平衡;

node :不明,参考kernel doc

smp_affinity :是一个bitmask用来设置CPU affinity,用来表示那些CPU可以handler这个IRQ,比如,echo 5 > /proc/irq/10/smp_affinity 表示1,2,3号CPU可以处理10号IRQ。当有多个CPU可以执行该IRQ时,kernel会采用Round Robin的方式去分配

spurious:可以获得该irq被处理和未被处理的次数的统计信息。

/proc/irq/default_smp_affinity 里面记录了对于未激活(non-allocated/activated) 的IRQ的CPU affinity bitmask。因为这些未激活的IRQ没有自己的subdirectory。

[test@myLinux proc]$ cd irq
[test@myLinux irq]$ ls
1    104  109  114  119  124  129  134  4   44  49  54  59  64  69  74  79  84  89  94  99
100  105  110  115  120  125  130  2    40  45  50  55  60  65  70  75  80  85  90  95  default_smp_affinity
101  106  111  116  121  126  131  3    41  46  51  56  61  66  71  76  81  86  91  96
102  107  112  117  122  127  132  37   42  47  52  57  62  67  72  77  82  87  92  97
103  108  113  118  123  128  133  39   43  48  53  58  63  68  73  78  83  88  93  98
[test@myLinux irq]$ cat default_smp_affinity
ffff

/proc/kallsyms

        在内核中通过/proc/kallsyms获得符号的地址。

生成过程:

./scripts/kallsyms.c负责生成System.map

./kernel/kallsyms.c负责生成/proc/kallsyms

./scripts/kallsyms.c解析vmlinux(.tmp_vmlinux)生成kallsyms.S(.tmp_kallsyms.S),然后内核编译过程中将kallsyms.S(内核符号表)编入内核镜像uImage

内核启动后./kernel/kallsyms.c解析uImage形成/proc/kallsyms

/proc/kallsyms包含了内核中的函数符号(包括没有EXPORT_SYMBOL)、全局变量(用EXPORT_SYMBOL导出的全局变量)

/proc/keys

        系统授权密钥环记录,包含了暴露给reading thread的key的列表

[test@myLinux proc]$ cat keys
0256e6a6 I--Q---  194 perm 3f030000  1000  1000 keyring  _ses: 3
20d035bf I--Q---    1 perm 3f010000  1000  1000 user     mykey: 16

/proc/key-users             

        此文件列出了每个用户ID的各种信息在系统上至少有一个密钥。

[test@myLinux proc]$ cat key-users
    0:    86 85/85 79/1000000 1488/25000000
  192:     1 1/1 1/200 9/20000

/proc/kmsg

        内核日志,通过dmesg或者klogd查看。

/proc/kpagecgroup       

        这个文件包含一个64位的内存索引节点号cgroup每页收费,按页面框架编制索引数字。

/proc/kpagecount

        此文件包含64位的次数计数每个物理页面帧都被映射,并按页面帧进行索引数字。

/proc/kpageflags

        此文件包含64位掩码,每个掩码对应物理页面框架;它是按页码索引的。

/proc/loadavg     

        用来表示CPU和IO的负载。从左到右分别是1分钟,5分钟,15分钟的平均CPU和IO负载值,running的进程数/总进程数,最后使用的进程ID。这是一个很重要的一个系统负载指标,可以使用top,w,uptime,vmstat等命令查看。

[test@myLinux proc]$ cat loadavg
2.89 3.26 3.34 5/2916 3945357

/proc/locks

        记录当前被kernel锁住的文件。

[test@myLinux proc]$ cat locks
1: FLOCK  ADVISORY  WRITE 2814436 fc:00:872727024 0 EOF
2: FLOCK  ADVISORY  WRITE 984 00:17:16298 0 EOF
3: FLOCK  ADVISORY  WRITE 1417 00:17:16853 0 EOF

从左到右分别表示:

  • unique ID
  • 锁种类:FLOCK为老式UNIX锁,POSIX为新式POSIX锁(使用lockf系统调用)
  • 锁形式:ADVISORY表示不会阻止其他进程访问数据,当时会阻止获取锁。MANDATORY表示禁止任何访问
  • 锁权限:READ或者WRITE
  • 进程ID
  • 文件ID:格式为,MAJOR:MINOR:INODE-NUMBER
  • 文件开始位置
  • 文件结束位置

/proc/mdstat

        显式磁盘的信息,包含正在使用RAIDS、创建分区情况等。

/proc/meminfo

        linux系统内存使用状况,是也一个较常使用的信息,常用的free、vmstat都是获取这里的信息。

[test@myLinux proc]$ cat meminfo
MemTotal:       32103296 kB
MemFree:         3933504 kB
MemAvailable:   10393024 kB
Buffers:            1344 kB
Cached:         11626304 kB
SwapCached:        70208 kB
Active:         13616512 kB
Inactive:       13533184 kB
Active(anon):   13305984 kB
Inactive(anon):  2925312 kB
Active(file):     310528 kB
Inactive(file): 10607872 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4222912 kB
SwapFree:        1743872 kB
Dirty:               640 kB
Writeback:             0 kB
AnonPages:      15454400 kB
Mapped:           372672 kB
Shmem:            709440 kB
Slab:             616640 kB
SReclaimable:     100288 kB
SUnreclaim:       516352 kB
KernelStack:       46864 kB
PageTables:        67776 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    20274560 kB
Committed_AS:   45796736 kB
VmallocTotal:   133009637312 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:            49152 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:         524288 kB
CmaFree:          486336 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:     524288 kB
Hugetlb:               0 kB

MemTotal系统从加电开始到引导完成,firmware/BIOS要保留一些内存,kernel本身要占用一些内存,最后剩下可供kernel支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。可参阅解读DMESG中的内存初始化信息。

MemFree表示系统尚未使用的内存。[MemTotal-MemFree]就是已被用掉的内存。

MemAvailable有些应用程序会根据系统的可用内存大小自动调整内存申请的多少,所以需要一个记录当前可用内存数量的统计值,MemFree并不适用,因为MemFree不能代表全部可用的内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存,即MemAvailable。/proc/meminfo中的MemAvailable是内核使用特定的算法估算出来的,要注意这是一个估计值,并不精确。

MemTotal:可用物理内存大小,是实际的物理内存条的总大小减去fireware和kernel本身占用的内存,即能够被kernel使用的内存总大小

MemFree:空闲内存大小,即free中的free大小

MemAvailable:可用内存大小,MemFree表示的是当前空闲的内存,但是在系统中还有一些内存虽然已经被使用但是可以被释放掉,如cache、buffer、slab中的部分,这些可回收的内存大小加上MemFree的大小才是系统的可用内存大小,即MemAvailable,MemAvailable·是一个估计值,因为一部分内存还没有被回收,这只是根据内核算法估算出来的结果,所以并不精确。

Buffers:块设备使用的缓存,包括直接读写块设备、以及文件系统的的元数据所使用的缓存,

直接对块设备进行读写操作使用的缓存。主要包括:直接读写块设备,文件系统元数据(比如superblock,不包括文件系统中文件的元数据)。它与Cached的区别在于,Cached表示的普通文件的缓存。

Cached:文件缓存

Buffers+Cached = Active(file)+Inactive(file)+Shmem

SwapCached:交换分区上占用的空间

Active:Active(anon) + Active(file),活跃的缓存大小

Inactive:Inactive(anon) +Inactive(file) 不活跃的缓存大小

Active(anon)/Inactive(anon)/Active(file)/Inactive(file):anon表示匿名内存,file表示文件内存,active表示最近使用过的内存,inactive表示最近没有使用的内存。当内存释放的时候,会优先释放inactive的内存空间。

Unevictable:不能够被释放的内存

Mlocked:被mlock()系统调用锁定的内存大小

SwapTotal:swap分区的大小

SwapFree:swap分区未使用的大小

Dirty:脏数据,尚未写入到磁盘中的数据大小

Writeback:正在写入的脏数据大小

AnonPages:匿名页的大小

Mapped:正在被进程关联的文件缓存大小

Shmem:tmpfs文件系统使用的内存和共享缓存大小

Slab:slab分配器使用的内存大小,等于SReclaimable+Sunreclaim

SReclaimable:Slab中不活跃的对象,可以被回收的容量

Sunreclaim:Slab中活跃的对象,不能被回收的容量

KernelStack:内核使用的堆栈大小,当前系统进程越多,kernelstack的值就越大

PageTables:页表使用的内存空间大小

NFS_Unstable:发送给NFS server但是还没有写入硬盘的缓存

Bounce:跳转buffer

CommitLimit:允许超过的虚拟内存大小

VmallocTotal:理论上虚拟内存空间的总大小

VmallocUsed:固定为0

VmallocChunk:固定为0

HardwareCorrupted:系统检测到内存上存在的硬件故障,会把有故障的页删除掉不再使用,HardwareCorrupted上就记录了删除掉的内存页大小

AnonHugePages:透明大页使用量

HugePage_Total:分配的大页内存大小

HugePage_Free:空闲的大页内存大小

Hugepagesize:大页大小
 

/proc/misc

        提供了那些没有被ASSIGN给其它/proc文件的数据信息,获取内核或硬件设备的某些信息。这些信息通常是原始数据的形式,需要一定的解释和分析后才能真正理解。

/proc/modules

        显示所有被加载到kernel的模块。使用lsmod命令查看更加工整。

[test@myLinux proc]$ cat modules
nfsv3 262144 0 - Live 0x0000000000000000
rpcsec_gss_krb5 262144 0 - Live 0x0000000000000000
nfsv4 786432 2 - Live 0x0000000000000000
dns_resolver 262144 1 nfsv4, Live 0x0000000000000000
nfs 458752 3 nfsv3,nfsv4, Live 0x0000000000000000
fscache 524288 2 nfsv4,nfs, Live 0x0000000000000000

从左到右分别是:

  • 模块名字
  • 模块所占内存大小
  • 有多少实例被加载
  • 所依赖的模块列表
  • 模块状态,Live,Loading,Unloading
  • 模块所在kernel内存的offset,用来做debug分析用,比如oprofile工具

/proc/mounts

        当前系统的文件系统mount列表。

[test@myLinux proc]$ cat mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0

从左到右依次是:

  • 文件系统名字
  • 文件mount点
  • 文件系统类型
  • 权限
  • dump
  • fsck

/proc/net

        也是一个很重要的文件记录,记录了系统的网络情况和网络配置信息。

[test@myLinux net]$ ls
anycast6   fib_trie      igmp6          ip_tables_matches  netfilter  psched  rt6_stats  sockstat6     udp6
arp        fib_triestat  ip6_flowlabel  ip_tables_names    netlink    ptype   rt_acct    softnet_stat  udplite
connector  icmp          ip6_mr_cache   ip_tables_targets  netstat    raw     rt_cache   stat          udplite6
dev        icmp6         ip6_mr_vif     ipv6_route         nfsfs      raw6    snmp       tcp           unix
dev_mcast  if_inet6      ip_mr_cache    mcfilter           packet     route   snmp6      tcp6          wireless
dev_snmp6  igmp          ip_mr_vif      mcfilter6          protocols  rpc     sockstat   udp           xfrm_stat

/proc/net/tcp 显示tcp4网络信息   /proc/net/tcp6 显示tcp6网络信息

/proc/pagetypeinfo

        相较于/proc/buddyinfo,该文件包含了更细节的空闲page的统计。用以分析内存分配bug。内核中通过对不同页面进行分组来避免碎片化将类型迁移到称为页块的相同连续内存区域中。

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      0      1      0      1      1      1      1      0      1      0      0 
Node    0, zone      DMA, type      Movable      0      0      0      0      0      0      0      0      0      1      3 
Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type   HighAtomic      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    DMA32, type    Unmovable     40     22      4     15      7      2      0      0      1      1      1 
Node    0, zone    DMA32, type      Movable   2674   2438   1697   1214    594    143     27      4      4      1    476 
Node    0, zone    DMA32, type  Reclaimable     30     36     18      9     11      9     17     13      5      3      4 
Node    0, zone    DMA32, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type    Unmovable    126     32     17      5      7      0      0      0      0      0      0 
Node    0, zone   Normal, type      Movable     49  11390   4915    618    279      4      0      0      0      0      0 
Node    0, zone   Normal, type  Reclaimable    127     78    253     99     75      9      1      0      0      0      0 
Node    0, zone   Normal, type   HighAtomic      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 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic      Isolate 
Node 0, zone      DMA            1            7            0            0            0 
Node 0, zone    DMA32            6         1754           24            0            0 
Node 0, zone   Normal          221         1724          343            0            0 

/proc/partitions

        包含了系统分区的信息。从左到右依次是:major number,minor number,block数量,分区名称。

major minor  #blocks  name

 253        0   52428800 vda
 253        1     204800 vda1
 253        2    1048576 vda2
 253        3   51173376 vda3
 253       16  262144000 vdb
 253       17  262142976 vdb1
  11        0    1048575 sr0
 252        0  309088256 dm-0
 252        1    4222976 dm-1

/proc/sched_debug

        kernel调度器的debug信息。

/proc/schedstat

        调度器状态数据

version 15
timestamp 5584247103
cpu0 0 0 0 0 0 0 424405389779060 96615823560430 22857723126
domain0 ffff 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

/proc/scsi

        以驱动程序命名的目录中的每个适配器都有一个文件系统。这些文件包含有关控制器的信息,包括所使用的IRQ和IO地址范围。显示的信息量为取决于使用的适配器。

[test@myLinux proc]$ cd scsi
[test@myLinux scsi]$ ls
device_info  scsi  sg
/proc/scsi/scsi文件中包含了被识别的scsi装置的列表。

/proc/slabinfo

        包含slab内存分配情况。Linux kernel会使用slab分配器进行低于一个內存页的内存分配。

/proc/softirqs

        为每个cpu提供自引导时间以来服务的softirq处理程序的计数。不同CPU上的软中断(soft interrupt)的数量统计。其中第一列里,TIMER为定时中断、NET_RX为网络接收、NET_TX为网络发送,SCHED内核调度、RCU(RCU 锁)。可以使用mpstate命令查看。当top发现CPU的si使用率很高时可以通过该文件查看那一类中断比较多,从而定位性能瓶颈。

> cat /proc/softirqs
                CPU0       CPU1       CPU2       CPU3
      HI:          0          0          0          0
   TIMER:      27166      27120      27097      27034
  NET_TX:          0          0          0         17
  NET_RX:         42          0          0         39
   BLOCK:          0          0        107       1121
 TASKLET:          0          0          0        290
   SCHED:      27035      26983      26971      26746
 HRTIMER:          0          0          0          0
     RCU:       1678       1769       2178       2250

/proc/stat

        记录了系统自上一次启动以来的一些运行数据,比如CPU在不同情况下的使用时间,中断数统计,上下文切换统计等等。此文件中报告的所有数字都是聚合数自系统首次启动以来。为了快速查看,只需将文件放入cat即可。

pu  244939043 160629 336654028 19810440829 26785008 71364376 44858107 0 0 0
cpu0 15394097 6838 21312646 1237930729 1819759 4460072 785206 0 0 0
cpu1 15903537 9583 21189406 1238963231 1755757 4487373 964874 0 0 0
cpu2 15625317 10440 21035396 1240356984 1619028 4344654 681100 0 0 0
cpu3 15389994 11336 20958128 1240475628 1694415 4374730 671430 0 0 0
cpu4 14765742 9987 21217351 1236138615 1660872 4556678 5244293 0 0 0
cpu5 15367563 10250 21036247 1236288558 1685287 4539681 4699207 0 0 0
cpu6 15621070 10316 20939876 1240437285 1657916 4323438 666094 0 0 0
cpu7 15042360 9733 20872200 1235218742 1521256 4600572 6344072 0 0 0
cpu8 15442128 9082 21049992 1240477633 1648660 4340707 668411 0 0 0
cpu9 15087681 9847 21031726 1235895283 1729551 4545753 5288452 0 0 0
cpu10 15296187 8765 21014969 1240382292 1716971 4370892 686983 0 0 0
cpu11 14502440 10752 20718650 1231199081 1594800 4768636 10780291 0 0 0
cpu12 15418422 11130 21081642 1240490524 1607996 4344265 668224 0 0 0
cpu13 15459410 8682 21040178 1240389689 1712380 4341569 668204 0 0 0
cpu14 15467422 10470 21137205 1239895477 1716727 4426684 671508 0 0 0
cpu15 15155665 13409 21018407 1235901069 1643625 4538663 5369752 0 0 0
intr 79132619396 0 0 1612993883 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 0 1 1 1 1 1 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 28130950 0 30553058 11094934 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 26097831 3 0 990261890 496529
ctxt 727964631919
btime 1670469897
processes 326788297
procs_running 3
procs_blocked 0
softirq 27907662096 3 2592561657 34065392 1442525309 63561764 0 2383454 3477120843 3772741 3111801749

/proc/swaps

        记录系统的swap空间以及使用数据。其中有多个swap空间是,Priority的值越低越会被使用。

Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4222912 2479040 -2

/proc/sys     

        提供kernel runtime配置接口。可以通过sysctl命令操作。

[test@myLinux proc]$ cd sys
[test@myLinux sys]$ ls
crypto  debug  dev  fs  fscache  kernel  net  user  vm

/proc/sysrq-trigger

        通过echo特定的指令到该文件中可以触发一些效果。需要使用root用户触发。也可以使用组合键Alt + SysRq + [command]的方式触发 。通过/proc/sys/kernel/sysrq可以显示哪些命令可以生效。

立即重新启动计算机
echo "b" > /proc/sysrq-trigger
 # 立即关闭计算机
echo "o" > /proc/sysrq-trigger
 # 导出内存分配的信息 (可以用/var/log/message 查看)
echo "m" > /proc/sysrq-trigger
 # 导出当前CPU寄存器信息和标志位的信息
echo "p" > /proc/sysrq-trigger
 # 导出线程状态信息
echo "t" > /proc/sysrq-trigger
 # 故意让系统崩溃
echo "c" > /proc/sysrq-trigger
# 立即重新挂载所有的文件系统 
echo "s" > /proc/sysrq-trigger
# 立即重新挂载所有的文件系统为只读
echo "u" > /proc/sysrq-trigger
# r、e、i、s、u、b的顺序触发,让系统安全重启

/proc/sysvipc

        记录System V IPC相关的信息,

[test@myLinux sysvipc]$ ls
msg  sem  shm
[test@myLinux sysvipc]$
[test@myLinux sysvipc]$ cat msg
       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime

[test@myLinux sysvipc]$ cat sem
       key      semid perms      nsems   uid   gid  cuid  cgid      otime      ctime
 808241953      65536   777          1  1001  1001  1001  1001 1670570581 1670491425
 808241955      98305   777          1  1001  1001  1001  1001 1670570581 1670491425
 808240416     131074   777          1  1001  1001  1001  1001 1673333559 1673333518
 808240417     163843   777          1  1001  1001  1001  1001 1673333559 1673333518
 808218727     196612   777          1  1021  1021  1021  1021 1677238188 1677565727
 808218728     229381   777          1  1021  1021  1021  1021 1677238188 1677565727
 808232700     262150   777          1  1021  1021  1021  1021 1678691867 1678672746
 808232703     294919   777          1  1021  1021  1021  1021 1678691867 1678672747
 808215986     327688   777          1  1021  1021  1021  1021 1679557274 1679557251
 808215989     360457   777          1  1021  1021  1021  1021 1679557274 1679557251
 808253583     393226   777          1  1023  1023  1023  1023 1680496661 1680496653
 808253586     425995   777          1  1023  1023  1023  1023 1680496661 1680496653
 808190784     458764   777          1  1021  1021  1021  1021 1682072583 1681917600
 808190785     491533   777          1  1021  1021  1021  1021 1682072583 1681917600
 808233564     524302   777          1  1023  1023  1023  1023 1683337566 1683334662
 808233567     557071   777          1  1023  1023  1023  1023 1683337566 1683334662
[test@myLinux sysvipc]$ cat shm
       key      shmid perms                  size  cpid  lpid nattch   uid   gid  cuid  cgid      atime      dtime      ctime                   rss                  swap
  • msg:表示消息
  • sem:表示信号量(semaphore)
  • shm:共享内存

/proc/timer_list

        内核提供了方便查看当前系统TickDevice、活动的Timer列表以及Timer使用的统计信息。内核分别用两个节点来表示TimerList和Timer统计信息。

一个是/proc/timer_list,打印per_cpu的hrtimer_bases信息以及基于此的timer列表,包括三种时MONOTONIC/REALTIME/BOOTTIME;以及Broadcast Tick Device和Per CPU Tick Device信息。

另一个是/proc/timer_stats,需要echo 1 > /proc/timer_stats打开,echo 0 /proc/timer_stats关闭。cat /proc/timer_stats可以获取统计信息。

/proc/timer_stats

        需要echo 1 > /proc/timer_stats打开,echo 0 /proc/timer_stats关闭。cat /proc/timer_stats可以获取统计信息。

统计结束后:从左到右依次是,timer count、进程号、进程名称、超时函数、启动timer函数。通过timer_stats可以知道系统的timer使用程度,一定程度上反映了进程的活跃状态

 

/proc/tty

        存储着可以使用以及正在使用的tty装置的信息。Linux上有3种tty装置,serial tty,pesudo tty,以及virtual tty。使用中的tty装置记录在 /proc/tty/drives文件中。/proc/tty/driver/serial中记录了每个serial tty的使用情况 。

[test@myLinux proc]$ cd tty
[test@myLinux tty]$ ls
driver  drivers  ldisc  ldiscs

/proc/uptime

        系统uptime时间,uptime命令查看的就是当前的记录

12893374.32 199328575.48

第一个参数代表从系统启动到现在的时间(以秒为单位)

第二个参数代表系统空闲的时间(以秒为单位

在SMP系统里,系统空闲的时间有时会是系统运行时间的几倍,因为系统空闲时间的计算,是把SMP算进去的,就是所你有几个逻辑的CPU(包括超线程)。

系统的空闲率(%) = num2/(num1*N) 其中N是SMP系统中的CPU个数。
计算一下空闲率:
3310821.00 / 3387048.81 = 0.9774943278718207
也就是说:它的空闲率是97%

说明:
(1)空闲率高低并不单意味着,它做的工作多少,还有跟服务器的配置和性能有很大的关系。
(2)空闲率跟服务器的配置有很大的关系,服务器的性能越好,配置越高,它处理的速度越快,配置高的服务器处理的时间要小于配置低的服务器。
(3)从空闲时间,你就可以判断你的服务器负载是否过大,看一下是不是有异常情况发生,如果空闲时间很小,说明你的服务器已经在满负荷运行,然后决定是不是需要升级你的服务器。
(4)系统空闲率越大,说明系统比较闲,可以加重一些负载;而系统空闲率很小,则可能考虑升级本机器硬件或者迁移部分负载到其他机器上。

/proc/version

        系统kernel版本信息

Linux version 4.4.0-19041-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #2311-Microsoft Tue Nov 08 17:09:00 PST 2022

/proc/vmallocinfo

        vmalloc分配信息,Vmalloc用来将不连续的物理地址分配给连续的虚拟地址。

> cat /proc/vmallocinfo
0xffffc20000000000-0xffffc20000201000 2101248 alloc_large_system_hash+0x204 ...
  /0x2c0 pages=512 vmalloc N0=128 N1=128 N2=128 N3=128
0xffffc20000201000-0xffffc20000302000 1052672 alloc_large_system_hash+0x204 ...
  /0x2c0 pages=256 vmalloc N0=64 N1=64 N2=64 N3=64
0xffffc20000302000-0xffffc20000304000    8192 acpi_tb_verify_table+0x21/0x4f...
  phys=7fee8000 ioremap
0xffffc20000304000-0xffffc20000307000   12288 acpi_tb_verify_table+0x21/0x4f...
  phys=7fee7000 ioremap
0xffffc2000031d000-0xffffc2000031f000    8192 init_vdso_vars+0x112/0x210

从左到右依次是:虚拟地址,分配大小,哪个函数分配的,物理地址,分配类型

/proc/vmstat

        显示从内核导出的虚拟内存的统计信息

nr_free_pages 61121 //空闲页数量
nr_zone_inactive_anon 45836 //所有zone统计的非活跃的匿名页数之和
nr_zone_active_anon 208114 //所有zone统计的活跃的匿名页数之和
nr_zone_inactive_file 165808 //所有zone统计的非活跃的文件页数之和
nr_zone_active_file 4853 //所有zone统计的活跃的文件页数之和
nr_zone_unevictable 0 //所有zone统计的不可释放的页数之和
nr_zone_write_pending 9 //脏页、写回页和不稳定页的计数
nr_mlock 0 //mlock的页数
nr_page_table_pages 1059 //分配到页表的页数
nr_kernel_stack 46880 //分配给内核堆栈的内存量
nr_bounce 0 //缓冲取页数量
nr_zspages 0 //Zsmalloc分配器分配的页数量
nr_free_cma 7599 //可用的CMA(连续内存分配器)页面数
numa_hit 41950664048 //进程从此节点成功分配成功的内存
numa_miss 0 //在非预期节点中分配
numa_foreign 0 //进程想在这个节点上分配,但最终却从另一个节点获得了内存
numa_interleave 4624 //交织分配的页
numa_local 41950664048 //从本地节点分配的内存
numa_other 0 //从其他节点分配的内存
nr_inactive_anon 45836 //所有node统计的非活跃的匿名页数之和
nr_active_anon 208114 //所有node统计的活跃的匿名页数之和
nr_inactive_file 165808 //所有node统计的非活跃的文件页数之和
nr_active_file 4853 //所有node统计的活跃的文件页数之和
nr_unevictable 0 // 所有node统计的不可释放的页数之和
nr_slab_reclaimable 1567 //已经分配出去的reclaimable slab object的内存大小
nr_slab_unreclaimable 8062 // 已经分配出去的unreclaimable slab object的内存大小
nr_isolated_anon 0 //anon lru的临时隔离页
nr_isolated_file 0 //文件lru临时隔离页
workingset_refault 14562813 //TODO

/proc/zoneinfo

        DMA,Normal, Highmem区域的详细内存使用情况

Node 0, zone    DMA
  per-node stats
      nr_inactive_anon 45836
      nr_active_anon 208140
      nr_inactive_file 166920
      nr_active_file 5141
      nr_unevictable 0
      nr_slab_reclaimable 1567
      nr_slab_unreclaimable 8063
      nr_isolated_anon 0
      nr_isolated_file 0
      workingset_refault 14562813
      workingset_activate 2242125
      workingset_nodereclaim 996722
      nr_anon_pages 241753
      nr_mapped    5974
      nr_file_pages 184369
      nr_dirty     7
      nr_writeback 0
      nr_writeback_temp 0
      nr_shmem     11214
      nr_shmem_hugepages 0
      nr_shmem_pmdmapped 0
      nr_anon_transparent_hugepages 0
      nr_unstable  0
      nr_vmscan_write 815704
      nr_vmscan_immediate_reclaim 621726
      nr_dirtied   58545394
      nr_written   48579207
  pages free     15447
        min      2172
        low      2715
        high     3258
        spanned  49152

注:整理过程参考了很多博客和官方文档,不逐一列举了,只放重要参考:

Linux procfs内容大汇总(1) - 知乎 

https://www.kernel.org/doc/Documentation/filesystems/proc.txt

Maintaining Linux man-pages

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/498200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM 体系结构

JVM: 跨平台语言 需要不同语言由自己编译器,生成符合 JSR-292 JVM规范的字节码文件,即可在 Java 虚拟机中运行 多语言混合编程: Java 平台上的多语言混合编程正成为主流,通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂…

服务攻防-数据库安全-InfluxdbH2databaseCouchDBElasticSearch数据库漏洞复现

目录 一、Influxdb-未授权访问-Jwt 验证不当 1、Infuxdb简介 2、安全问题 3、漏洞复现 二、H2database-未授权访问-配置不当 1、H2database简介 2、安全问题 3、漏洞复现 三、CouchDB-权限绕过配合RCE-漏洞 1、CouchDB简介 2、安全问题 3、漏洞复现 四 、Elast…

《程序员面试金典(第6版)》面试题 16.15. 珠玑妙算

题目描述 珠玑妙算游戏(the game of master mind)的玩法如下。 计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B&…

为什么我选择订阅ChatGPT Plus计划?

自从ChatGPT诞生以来,它的强大功能和表现一直备受好评。作为一个长期使用者,我一直对其性能和智能感到惊叹。最近,我决定升级我的用户体验,订阅了ChatGPT Plus计划。在这篇博客中,我将向您详细介绍ChatGPT Plus的优势和…

c语言那些有趣的事 -- 猜数字游戏

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章用循环去写一些题目。 让我们开启c语言…

细谈抽象类

目录 抽象类 1.抽象类是被abstract修饰的类 2.抽象类中的抽象方法 3.抽象类中可以有和普通类一样的成员变量和成员方法 4.抽象类不能被实例化 5.那么抽象类不能被实例化要它有何用??? 6.注意: 抽象类 如果一个类中没有包含足…

基于Open3D的点云处理4-旋转、平移、缩放

三维变换主要包括:平移、旋转、缩放 在open3d中,针对三维对象的变换主要有translate、rotate、scale和transform • Translate 平移 • Rotate 旋转 • Scale 缩放 • Transform 变换矩阵(4*4) mesh_tx mesh.translate((1.5, …

昆山杜克大学首届毕业生就业情况

昆山杜克大学本科教育以通识博雅课程和跨学科教育为主要特色,倡导文理兼修,并以研究为导向。所有学生入学时不分专业,他们充分地自由选课探索之后,于大二结束之前选择最适合自己的专业。首届毕业生分布于以下12个专业。 教育理念是…

《SQLi-Labs》03. Less 11~15

sqli Less-11知识点题解 Less-12题解 Less-13题解 Less-14题解 Less-15知识点题解 sqli。开启新坑。 Less-11 知识点 第十一关页面发生了变化,是账户登录页面。那么注入点在输入框。 前十关使用的是 get 请求,参数都体现在 url 上,而十一关…

测试2:基础

目录 1.软件测试的生命周期 2.描述BUG 3.定义bug的级别 1.Blocker(崩溃) 2.Critical(严重) 3、Major(一般): 4、Minor(次要): 4.BUG的生命周期 1.软件测试的生命周期 需求分析,测试计划,测试设计,测…

实施CRM目标有哪几步?如何制定CRM目标?

在当今竞争激烈的商业环境中,与客户建立持久的关系是企业重要的工作。CRM客户管理系统能有效帮助企业管理优化流程、管理客户,提高销售成功率,推动收入增长。那么您了解如何实施CRM吗?下面说说实施CRM目标是什么,如何设…

Python小姿势 - # 字典(Dictionary)

字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 keyvalue 对用冒号 : 分割,每个对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, …

CSDN 周赛 50 期

CSDN 周赛 50 期 1、题目名称:订班服2、题目名称:异或和3、题目名称:零钱兑换4、题目名称:小艺照镜子小结 1、题目名称:订班服 小A班级订班服了! 可是小A是个小糊涂鬼,整错了好多人的衣服的大小…

2022年NOC大赛编程马拉松赛道复赛图形化高年级A卷-正式卷,包含答案

目录 单选题: 多选题: 编程题: 下载打印文档做题: 2022年NOC大赛编程马拉松赛道复赛图形化高年级A卷-正式卷,包含答案 单选题:<

搭建Linux依赖环境

目录 1、jdk&#xff08;基于yum进行安装 &#xff09; 2、Tomcat &#xff08;手动下载安装&#xff09; 3、MariaDB&#xff08;基于yum进行安装&#xff09; 安装 启动 测试连接 1、jdk&#xff08;基于yum进行安装 &#xff09; 可以使用yum list | grep [关键词…

js基础1

一.js中的变量 a.var,let ,const的异同 1.var var在不进行初始化的条件下的值为undefined,它的作用域是函数作用域&#xff0c;在使用var在函数的内部定义一个变量的时候&#xff0c;意味着该变量在退出前进行销毁。并且它可以进行变量提升。 例子&#xff1a; function f…

操作系统概述(一、并发)

系列文章目录 文章目录 系列文章目录前言定义 一、操作系统发展史1940s的程序1950s的计算机1960s的计算机1970s 基本和现代一样了 others 二、程序状态模型从不同视角看程序&#xff1a; 操作系统上的程序 三、线程库四、程序并发五、自旋锁与互斥锁的实现自旋锁的使用场景 六、…

21 brk 的初始化

前言 这个问题是 衍生自 malloc 的问题的调试 malloc 虚拟内存分配的调试(1) malloc 虚拟内存分配的调试(2) 假设我们使用 gdb 或者 gdbserver 启动调试的该测试用例对应的可执行程序 我们可以观察到的现象是 p1, p2, p3 的地址是固定的, 均是类似于 elf 中最大的虚拟地…

基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面

使用vue3pinia2开发仿制chatgpt界面聊天实例Vue3-Chatgpt 基于Vue3.xPinia2VueRouterVue3-Markdown等技术构建仿ChatGPT网页端聊天程序。支持经典分栏界面布局、light/dark模式、全屏半屏显示、Markdown语法解析、侧边栏隐藏等功能。 技术框架 编辑工具&#xff1a;Cursor框架…

精炼计算机网络——物理层(二)

文章目录 前言2.4信道复用技术2.4.1 频分复用、时分复用和统计时分复用2.4.2 波分复用2.4.3 码分复用 2.5 数字传输系统2.6 带宽接入技术2.6.1 ADSL技术2.6.2 光纤同轴混合网&#xff08;HFC网&#xff09;2.6.3 FTTx技术 总结 前言 上篇文章&#xff0c;我们初步了解了物理层…