操作系统信息

1.伪文件系统(Pseudo Filesystem)

伪文件系统是一种虚拟的文件系统,它并不依赖于物理存储设备,而是存在于内存中,通过文件和目录的形式,为用户和应用程序提供访问系统内核数据、硬件设备或进程信息的接口。这些文件系统不占用外存空间,仅在内存中存在。

1.常见的伪文件系统

  • /proc 文件系统(procfs)

    • 用于提供内核和进程的运行时信息,例如系统内存、进程状态、CPU信息等。

    • 每个运行的进程在/proc下都有一个以进程ID命名的目录,包含该进程的各种信息。

    • 用户可以通过读取或写入/proc中的文件来获取或修改内核参数。

  • /sys 文件系统(sysfs)

    • 用于将内核中的设备和驱动程序信息以文件的形式导出到用户空间。

    • 它提供了一种将硬件设备和驱动程序关联起来的方法,便于设备管理和调试。

  • 管道文件系统(pipefs)

    • 用于实现进程间的通信,数据存储在内存中的FIFO缓冲区中。

    • 管道文件没有文件名,仅在同源进程间可见。

  • 临时文件系统(tmpfs)

    • 用于存储临时文件和目录,数据存储在内存中。

    • 常用于存储系统运行时的临时数据,如/dev/shm/run等。

2./proc 的结构 

/proc 文件系统以文件的形式组织和呈现系统信息,使得用户可以通过标准的文件操作命令(如 catls 等)来查看和修改这些信息。

/proc 文件系统由两部分组成:进程目录系统信息文件

1. 进程目录

/proc 下的每个数字目录(如 /proc/1/proc/2 等)都对应于一个正在运行的进程,目录名即为进程的 PID(进程ID)。这些目录中包含了与该进程相关的各种信息文件,例如:

  • /proc/[pid]/stat:包含进程的状态信息,如进程ID、父进程ID、进程状态(运行、睡眠、僵尸等)、CPU使用时间等。

  • /proc/[pid]/status:以更易读的格式显示进程的状态信息,包括进程名称、优先级、内存使用情况等。

  • /proc/[pid]/cmdline:显示进程启动时的命令行参数。

  • /proc/[pid]/environ:显示进程的环境变量。

  • /proc/[pid]/maps:显示进程的内存映射信息,包括代码段、数据段、堆栈等。

  • /proc/[pid]/fd/:包含该进程打开的所有文件描述符的符号链接。

  • /proc/[pid]/exe:一个符号链接,指向该进程的可执行文件路径。

2. 系统信息文件

除了进程目录,/proc 还包含许多以文件形式呈现的系统信息。这些文件提供了关于系统硬件、内核参数、资源使用情况等的详细信息,例如:

  • /proc/version:显示内核版本信息。

  • /proc/meminfo:显示系统的内存使用情况,包括总内存、空闲内存、缓存和缓冲区大小等。

  • /proc/cpuinfo:显示CPU的详细信息,如型号、核心数、主频等。

  • /proc/stat:显示系统整体的统计信息,包括CPU使用情况、中断次数、上下文切换次数等。

  • /proc/uptime:显示系统自启动以来的运行时间。

  • /proc/loadavg:显示系统的平均负载情况,包括1分钟、5分钟和15分钟的平均负载。

  • /proc/filesystems:显示系统支持的文件系统类型。

  • /proc/mounts:显示当前挂载的文件系统及其挂载点。

  • /proc/net/:包含网络相关的文件,如 /proc/net/dev(网络设备统计信息)、/proc/net/tcp(TCP连接信息)等。

  • /proc/sys/:包含可动态调整的内核参数,用户可以通过修改这些文件中的内容来调整内核行为。

3./proc 的用途

  1. 系统监控:通过查看 /proc 中的文件,用户可以实时了解系统的运行状态,如CPU使用率、内存占用情况、进程状态等。

  2. 故障排查:当系统出现异常时,/proc 提供的详细信息可以帮助管理员快速定位问题。

  3. 性能优化:通过调整 /proc/sys/ 中的内核参数,用户可以优化系统性能。

  4. 开发调试:程序员可以利用 /proc 中的进程信息来调试程序,例如查看进程的内存映射、文件描述符等。

4.top

top命令是通过 /proc/stat中数据,进行换算得出。

1. 系统信息区域

%Cpu(s): 1.0 us, 0.8 sy, 0.0 ni, 98.0 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st

这行信息显示了 CPU 的使用情况,各个字段的含义如下:

  • us(User):用户态(User Mode)的 CPU 使用率,表示 CPU 在用户态运行程序所占用的时间比例。这里为 1.0%

  • sy(System):内核态(Kernel Mode)的 CPU 使用率,表示 CPU 在内核态运行系统调用或内核任务所占用的时间比例。这里为 0.8%

  • ni(Nice):调整过优先级(Nice)的进程占用的 CPU 时间比例。这里为 0.0%,表示没有进程通过 nice 值调整优先级来占用 CPU。

  • id(Idle):CPU 空闲时间的比例。这里为 98.0%,表示 CPU 大部分时间处于空闲状态。

  • wa(I/O Wait):CPU 等待 I/O 操作完成的时间比例。这里为 0.2%,表示 CPU 等待磁盘或其他 I/O 设备的时间较少。

  • hi(Hardware Interrupts):硬件中断占用的 CPU 时间比例。这里为 0.0%,表示硬件中断对 CPU 的占用非常低。

  • si(Software Interrupts):软件中断占用的 CPU 时间比例。这里为 0.1%,表示软件中断对 CPU 的占用也很低。

  • st(Steal Time):虚拟化环境中,虚拟机被其他虚拟机占用 CPU 时间的比例。这里为 0.0%,表示没有明显的 CPU 被抢占的情况。

2. 进程列表区域

在系统信息下方,top 显示了系统中各个进程的详细信息,包括:

  • PID:进程ID。

  • USER:进程所属的用户。

  • PR:进程的优先级。

  • NI:进程的nice值(优先级调整值)。

  • VIRT:进程占用的虚拟内存总量。

  • RES:进程占用的物理内存总量。

  • SHR:进程占用的共享内存总量。

  • S:进程状态(如运行、睡眠、僵尸等)。

  • %CPU:进程占用的 CPU 使用率。

  • %MEM:进程占用的物理内存使用率。

  • TIME+:进程占用的 CPU 时间。

  • COMMAND:进程的命令行名称。

 2.系统性能

1.CPU平均负载 

1.CPU平均负载(CPU Load Average)

反映了系统CPU的繁忙程度,指在单位时间内,系统中处于可运行状态(running)和不可中断状态(uninterruptible sleep)的平均进程数。这包括了正在使用CPU的进程和那些已经准备好但正在等待CPU时间的进程,以及那些正在等待I/O操作完成而不能被中断的进程。

使用uptime/top查看

它由三个值组成,分别表示过去1分钟、5分钟和15分钟内的平均负载。这些值越高,说明系统越繁忙。

2.平均负载和CPU使用率

虽然平均负载和CPU使用率都反映了系统的繁忙程度,但它们之间并没有直接的数学关系。CPU使用率表示CPU时间被使用的比例,而平均负载则表示在特定时间段内系统中活跃的进程数。

  • CPU使用率:表示CPU时间被使用的比例,包括用户态(user)和内核态(system)的CPU时间。

  • 平均负载:表示在特定时间段内系统中活跃的进程数,包括正在运行和等待运行的进程。

CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的

I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高

3.如何解读CPU平均负载

  • 理想值:对于单核CPU系统,理想值是1.0。这意味着CPU在大部分时间里都在高效运行,没有过度负载,也没有闲置。

  • 多核CPU系统:对于多核CPU系统,理想值是CPU核心数。例如,对于一个4核CPU系统,理想值是4.0。如果平均负载低于4.0,说明CPU没有充分利用;如果高于4.0,说明系统可能过载。

  • 1分钟平均负载:表示系统的即时负载情况。如果这个值很高,说明系统当前可能面临较大的压力。

  • 5分钟和15分钟平均负载:这两个值提供了更长时间段内的负载情况,有助于判断系统是否持续过载。

  • 数值基本相等:说明负载很平稳

 2./proc/stat

向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息

  • 第一列:user,表示用户态的 CPU 时间(单位:jiffies,时钟滴答)。

  • 第二列:nice,表示 nice 值调整的用户态 CPU 时间。

  • 第三列:system,表示内核态的 CPU 时间。

  • 第四列:idle,表示 CPU 空闲时间。

  • 第五列:iowait,表示 CPU 等待 I/O 操作完成的时间。

  • 第六列:irq,表示处理硬件中断的时间。

  • 第七列:softirq,表示处理软件中断的时间。

  • 第八列:steal,表示虚拟化环境中,虚拟机被其他虚拟机抢占的时间。

  • 第九列:guest,表示运行虚拟机的时间。

  • 第十列:guest_nice,表示运行虚拟机且被 nice 调整的时间。

 3. /proc/softirqs

1.什么是中断 

中断是计算机系统中的一种机制,用于通知中央处理器(CPU)发生了需要立即处理的事件。中断可以由硬件设备(如键盘、鼠标、磁盘驱动器等)或软件(如操作系统、运行中的程序)产生。当一个中断发生时,它会打断当前正在执行的程序,让CPU转而处理一个称为中断服务例程(Interrupt Service Routine,ISR)的特殊程序。处理完中断后,CPU通常会返回到被打断的程序继续执行。

1.中断的类型
  1. 硬件中断

    • 由外部硬件设备触发,例如:

      • 用户输入(键盘、鼠标操作)。

      • 硬件故障(如硬盘故障)。

      • 定时器到期(用于实现时间相关的功能,如计时)。

      • I/O操作完成(如磁盘读写操作完成)。

  2. 软件中断

    • 由软件触发,通常用于执行特定的系统调用或请求操作系统服务,例如:

      • 进程间通信(IPC)。

      • 系统调用(如请求读写文件)。

      • 异常处理(如除零错误、非法内存访问)。

2.中断的作用
  1. 异步事件处理

    • 中断允许系统异步处理外部事件,提高了系统的响应能力。

  2. 多任务处理

    • 在多任务操作系统中,中断机制可以用于任务切换,实现多任务并发执行。

  3. 实时处理

    • 实时操作系统(RTOS)依赖中断来实现对实时事件的快速响应。

  4. 硬件抽象

    • 中断提供了一种硬件抽象,使得软件可以通过统一的接口与不同的硬件设备交互

2. 顶半部(上半部,Top Half)和下半部(Bottom Half)

在Linux系统中,中断处理被分为两个主要部分:顶半部(上半部,Top Half)和下半部(Bottom Half)。这种设计是为了解决中断处理程序执行时间过长和中断丢失的问题,同时确保关键任务能够迅速得到响应。

顶半部的主要任务是快速处理中断,并暂时关闭中断请求。它主要处理与硬件紧密相关或时间敏感的事情,比如对硬件的读取寄存器中的中断状态并清除中断标志。当一个中断发生时,顶半部会进行相应的硬件操作,并将中断例程的下半部挂到该设备的下半部执行队列中。由于顶半部的执行速度很快,它可以服务更多的中断请求。

下半部用于延迟处理顶半部未完成的工作。与顶半部不同,下半部是可以被中断的,这意味着它可以在执行过程中被新的中断打断。下半部几乎执行了中断处理程序的所有任务,但它并不是非常紧急的,通常比较耗时。因此,它的执行时机由系统自行安排,并不在中断服务上下文中执行。

Linux中实现下半部目前使用下面三种方法:

  1. 软中断(softirq)

  2. tasklet

  3. 工作队列(work queue)。

3.什么是软中断

软中断是 Linux 内核中的一种机制,用于处理一些需要延迟执行的任务,例如网络数据包处理、定时器事件等。这些任务通常在硬件中断处理程序之外运行,以避免长时间占用硬件中断上下文。它与硬件中断(HardIRQ)不同,硬件中断是由外部硬件设备触发的,而软中断是由内核自身触发的。 

4.软中断的类型

Linux 内核定义了多种软中断类型,每种类型对应一种特定的任务。常见的软中断类型包括:

  • HI(High-priority):高优先级软中断。

  • TIMER(Timer):定时器软中断,用于处理定时器事件。

  • NET_TX(Network Transmit):网络数据发送软中断,用于处理网络数据包的发送。

  • NET_RX(Network Receive):网络数据接收软中断,用于处理网络数据包的接收。

  • BLOCK(Block I/O):块设备(如磁盘)相关软中断。

  • IRQ_POLL(IRQ Poll):用于轮询中断处理。

  • TASKLET(Tasklet):任务队列软中断,用于处理一些延迟执行的任务。

  • SCHED(Scheduler):内核调度软中断,用于处理进程调度相关任务。

  • HRTIMER(High-Resolution Timer):高精度定时器软中断。

  • RCU(Read-Copy-Update):读-拷贝-更新软中断,用于处理内核中的 RCU 机制。

 4./proc/meminfo

/proc/meminfo 提供了关于系统内存使用情况的详细信息。包括物理内存、交换空间(Swap)以及各种内存区域的使用情况。

交换空间(Swap Space)是 Linux 系统中的一种内存管理技术,它允许操作系统将部分内存页(memory pages)移动到磁盘上,以便为更重要的进程腾出物理内存(RAM)。交换空间在磁盘上分配,可以是专门的交换分区(swap partition)或者交换文件(swap file)

free是一个在类 U    nix 系统中常用的命令行工具,用于显示系统中空闲和已使用的物理内存(RAM)、交换空间(Swap)以及共享内存(Shared Memory)的总量。这个命令提供了一种快速查看系统内存使用情况的方法。 

共享内存(Shared Memory)是进程间通信(IPC,Inter-Process Communication)的一种方式,它允许两个或多个进程共享一个给定的内存区域。通过共享内存,进程可以直接读写内存中的数据,而不需要进行数据的复制,这使得进程间的数据交换非常快速和高效。

  1. MemTotal:系统总的物理内存大小(单位:KB)。

  2. MemFree:当前未被使用的物理内存大小(单位:KB)。

  3. MemAvailable:可供新进程分配的物理内存大小(单位:KB),这个值考虑了操作系统可能会使用的内存。

  4. Buffers(磁盘数据缓存):缓冲区是内存中的一部分,用于临时存储从磁盘读取的数据或即将写入磁盘的数据。它的主要作用是减少磁盘 I/O 操作的次数,提高数据传输的效率。

  5. Cached(文件数据缓存):缓存是内存中用于存储文件系统数据的区域,它通常用于存储从磁盘读取的文件内容。缓存的目的是加快文件访问速度

  6. SwapCached:被交换到交换空间但仍然在物理内存中的内存量(单位:KB)。

  7. Active:最近被访问过的内存,包括文件系统缓存和页面缓存(单位:KB)。

  8. Inactive:不常被访问的内存,这部分内存可以被回收利用(单位:KB)。

  9. Active(anon):最近被访问过的匿名映射内存(单位:KB)。

  10. Inactive(anon):不常被访问的匿名映射内存(单位:KB)。

  11. Active(file):最近被访问过的文件映射内存(单位:KB)。

  12. Inactive(file):不常被访问的文件映射内存(单位:KB)。

  13. Unevictable:不能被回收的内存(单位:KB)。

  14. Mlocked:被锁定的内存,这部分内存不能被交换到磁盘(单位:KB)。

  15. SwapTotal:系统总的交换空间大小(单位:KB)。

  16. SwapFree:当前未被使用的交换空间大小(单位:KB)。

  17. Dirty:等待被写入磁盘的内存量(单位:KB)。

  18. Writeback:正在被写入磁盘的内存量(单位:KB)。

  19. AnonPages:匿名页面的内存量(单位:KB)。

  20. Mapped:被文件映射到内存的页面量(单位:KB)。

  21. Shmem:共享内存的大小(单位:KB)。

5./proc/net/dev

读取或更改网络适配器及统计信息 

  • Interface:网络接口的名称,例如 lo(本地回环接口)、eth0(以太网接口)等。

  • Receive:接收数据的统计信息。

    • bytes:接收的总字节数。

    • packets:接收的总数据包数。

    • errs:接收过程中发生的错误数。

    • drop:接收过程中丢弃的数据包数。

    • fifo:接收过程中发生的 FIFO(先进先出)溢出数。

    • frame:接收过程中发生的帧错误数。

    • compressed:接收过程中压缩的数据包数。

    • multicast:接收的组播数据包数。

 6.IO

在 Linux 系统中,I/O(输入/输出)操作的性能和状态可以通过多种工具和文件来查看。以下是一些常用的查看 I/O 的方法:

1. 通过 /proc 文件系统查看

Linux 的 /proc 文件系统是一个虚拟文件系统,提供了系统运行时的动态信息。以下是一些与 I/O 相关的文件:

  • /proc/diskstats:显示磁盘 I/O 的统计信息。

    • 格式示例:

      8 0 sda 123 456 789 1011 1213 1415 1617 1819 2021 2223 2324
    • 字段含义:

      • 80:主设备号和次设备号。

      • sda:设备名称。

      • 123:读请求数。

      • 456:合并的读请求数。

      • 789:读扇区数。

      • 1011:读操作花费的时间(毫秒)。

      • 1213:写请求数。

      • 1415:合并的写请求数。

      • 1617:写扇区数。

      • 1819:写操作花费的时间(毫秒)。

      • 2021:当前正在处理的 I/O 请求。

      • 2223:当前正在处理的 I/O 请求花费的时间。

      • 2324:I/O 请求队列的总时间。

  • /proc/[pid]/io:显示特定进程的 I/O 统计信息。

    • 示例内容

      rchar: 123456
      wchar: 789012
      syscr: 345
      syscw: 456
      read_bytes: 789012
      write_bytes: 123456
      cancelled_write_bytes: 0
    • 字段含义:

      • rchar:从文件中读取的字节数。

      • wchar:写入文件的字节数。

      • syscr:发起的读操作次数。

      • syscw:发起的写操作次数。

      • read_bytes:实际读取的字节数。

      • write_bytes:实际写入的字节数。

      • cancelled_write_bytes:取消的写操作字节数。

2. 使用命令行工具

Linux 提供了许多命令行工具来查看 I/O 活动和性能:

  • iostat:显示 CPU 和 I/O 设备的使用情况。

    • 示例命令:

      iostat -x 1
    • 选项:

      • -x:显示扩展的 I/O 统计信息。

      • 1:每秒刷新一次。

    • 输出示例:

      复制

      Linux 5.10.0-14-amd64 (localhost)   03/24/2025     _x86_64_        (4 CPU)
      
      avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                 1.23    0.00    0.45     0.12    0.00   98.18
      
      Device            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
      sda               2.34        12.34        56.78    123456     789012
  • vmstat:显示虚拟内存、进程、I/O、中断和 CPU 活动。

    • 示例命令:

      bash复制

      vmstat 1
    • 选项:

      • 1:每秒刷新一次。

    • 输出示例:

      复制

      procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
       0  0      0 123456   7890  12345    0    0     0     0    0    0  1  0 99  0
  • iotop:实时显示每个进程的 I/O 使用情况。

    • 示例命令:

      bash复制

      iotop
    • 输出示例:

      复制

      Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
      TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO    COMMAND
      1234 be/4  user1      0.00 B/s    0.00 B/s  0.00 %  0.00 %  process1
      5678 be/4  user2      0.00 B/s    0.00 B/s  0.00 %  0.00 %  process2
  • hdparm --fibmap <file>:查看文件的磁盘块分配情况。

    • 示例命令:

      bash复制

      hdparm --fibmap file.txt
    • 输出示例:

      复制

      file.txt:
       physical block: 12345, 67890

3. 通过系统日志查看

某些 I/O 错误或事件可能会记录在系统日志中,例如 /var/log/syslog/var/log/messages。可以使用 grep 等工具来搜索相关的日志条目。

4. 通过监控工具

一些高级监控工具可以提供更详细的 I/O 性能分析,例如:

  • nmon:提供系统性能的实时监控。

  • collectl:轻量级的性能监控工具,可以记录和分析系统性能数据。

  • atop:提供系统负载和资源使用情况的实时监控。

3.系统性能测试

1.stress 

stress 是一个用于在 Linux 系统中进行压力测试的命令行工具,它可以模拟 CPU、内存、磁盘 I/O 等负载,帮助测试系统的性能和稳定性 

  • -c--cpu N:创建 N 个进程,模拟 CPU 负载。

  • -i--io N:创建 N 个进程,模拟 I/O 负载。

  • -m--vm N:创建 N 个进程,模拟内存分配和释放。

  • --vm-bytes B:指定每个进程分配的内存大小,默认为 256M。

  • -d--hdd N:创建 N 个进程,模拟磁盘写操作。

  • --hdd-bytes B:指定磁盘写操作的文件大小,默认为 1GB。

  • -t--timeout N:设置压力测试的持续时间(秒)。

  • -v--verbose:详细输出。

  • -q--quiet:静默输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值