Project

General

Profile

Linux运维

  1. 分屏工具
    tmux
    左右分屏:ctrl+b+%
    分屏切换:ctrl+向左/向右
    
  2. 监控工具
    nmon
    
  3. 查看进程树
    pstree
    
  4. 查看进程堆栈
    1)
    gdb -p pid
       (gdb) detach
       (gdb) quit
    2)
    pstack pid
    3)
    strace -p pid
    4)
    perf record -p pid -g
    perf report
    5)
    cat /proc/pid/stack
    
  5. for
    #!/bin/bash
    
    process_names=("test1" "test2")
    
    for name in "${process_names[@]}"; do
        nohup ./top.sh "$name" "top_${name}.log" &>/dev/null &
        nohup ./smem.sh "$name" "smem_${name}.log" &>/dev/null &
        nohup ./pmap.sh "$name" "pmap_${name}.log" &>/dev/null &
        nohup ./smaps.sh "$name" "pmap_${name}.log" &>/dev/null &
    done
    
  6. 查看内存使用情况 top
    VIRT: 虚拟内存使用量
    RES: 常驻内存使用量(实际使用的物理内存)
    SHR: 共享内存使用量
    %MEM: 使用的物理内存占总内存的百分比
    VIRT (Virtual Memory)
    定义: VIRT 表示进程使用的虚拟内存总量,包括所有分配的内存(无论是否在物理内存中),以及映射的文件和共享库。
    包含内容:
    进程的代码段和数据段。
    共享库的内存。
    进程使用的所有内存映射文件。
    进程未使用的内存(例如,已分配但未使用的堆内存)。
    注意: VIRT 的值可能会很大,因为它包括了所有分配的内存,而不仅仅是当前实际使用的物理内存。
    RES (Resident Memory)
    定义: RES 表示进程当前使用的常驻内存量,即实际在物理内存中占用的内存。
    包含内容:
    进程的实际数据和代码在物理内存中的部分。
    不包括被换出到交换空间的内存。
    不包括未使用的内存。
    注意: RES 的值通常比 VIRT 小,因为它只反映了实际在物理内存中使用的部分。
    top -n 1
    top-->shift+m
    top -b -o %MEM -n 1
    注意:top与nohup连用时记得加-b(批量模式)参数,不能会报错:top: failed tty get
    
    查看...
  7. 查看内存使用情况 smem
    apt install smem
    smem -k -s uss
    -k参数用来显示内存单位
    -s表示排序
    uss表示对USS进行排序
    USS(Unique Set Size):-->独占:进程独自占用的内存,它只计算了进程占用的内存大小,不包含任何共享部分。
    PSS(Proportional Set Size):-->共享库均分:所有使用某共享库的程序均分该共享库占用的内存,显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存大小进行平均后,再分摊到各进程上去。
    RSS(Resident Set Size):用top命令可用查询到,是最常用的内存指标,表示进程占用的物理内存大小。但将各个进程的RSS值相加,通常会超出整个系统的内存消耗,因为RSS中包含了各个进程间的共享内存。
    smem -p -s uss(显示百分比)
    smem -k -P 进程名
    
    查看...
  8. 查看内存使用情况 pmap
    比top更准确查看VIRT/RES: watch -n 1 "pmap -x $(pgrep test) | grep total"
    1)说明 查看...
    2)示例 查看...
  9. 查看内存使用情况 smaps
    1)说明 查看...
    2)示例 查看...
  10. find
    # 删除 /test/ 目录中所有在 "2023-10-20 10:00" 之前(包括该时间)修改的文件:
    find /test/ -type f ! -newermt "2023-10-20 10:00" -exec rm -f {} +
    # -type f: 只查找文件(不包括目录)
    # ! -newermt "2023-10-20 10:00": 这部分指定了一个条件,用于查找不晚于指定日期和时间 "2023-10-20 10:00" 修改的文件。! 是一个否定操作符,-newermt 用于比较文件的修改时间。
    # -exec rm -f {} +: 对每个符合条件的文件执行 rm -f 命令。{} 是当前找到的文件的占位符,+ 允许 find 将多个文件一次性传递给 rm,这比对每个文件单独执行 rm 更高效。
    :<<COMMENT
    rm -f {} +: 这种方式使用 + 作为结尾,意味着 find 会尽可能多地将匹配的文件传递给 rm 命令一次性执行。这种方式更高效,因为它减少了 rm 命令的调用次数。
    rm -f {} \;: 这种方式使用 \; 作为结尾,意味着 find 对每个匹配的文件单独调用一次 rm 命令。这可能会导致更多的 rm 调用,尤其是在匹配文件很多的情况下。
    COMMENT
    
  11. 其它
    1. CPU性能调优工具
    vmstat
    uptime
    mpstat
    2. 内存性能调优工具
    free
    smem
    3. 磁盘性能调优工具
    iotop
    iostat
    4. 网络性能调优工具
    pint 
    mtr IP
    5. 综合性能分析工具
    htop
    6. 参考
    https://blog.csdn.net/edward_zcl/article/details/123851460