zoukankan      html  css  js  c++  java
  • Linux系统管理

    进程管理

    查看进程

    查看进程:

    ps aux
    ps -le
    

    查看进程树:

    pstree 
    pstree -p // 查看每个进程的id号,会展开折叠进程
    pstree -u // 查看进程的用户
    

    top命令:

    • 选项
      • -d 秒数:指定top命令每隔几秒更新。默认是3秒
      • -b: 使用批处理模式输出。一般和"-n"选项合用
      • -n 次数:指定top命令执行的次数。一般和"-b"选项合用
      top -b -n 1 > top.log   // 刷新一次i进程信息重定向到top.log日志文件中
      
    • 在top命令的交互模式当中可以执行的命令:
      • ?或h: x显示交互模式的帮助
      • P: 以CPU使用率排序,默认就是此项
      • M: 以内存的使用率排序
      • N: 以PID排序
      • q: 退出top

    第一行信息为任务队列信息:

    内容 说明
    12:26:46 系统当前时间
    up 1 day, 13:32 系统的运行时间,本机已经运行1天13小时32分钟
    2 users 当前登录了两个用户
    load average: 0.00, 0.00, 0.00 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于cpu核数时负载较小,否则系统超出负荷。

    第二行为进程信息:

    内容 说明
    Tasks: 95 total 系统中的进程总数
    1 running 正在运行的进程数
    94 sleeping 睡眠的进程
    0 stopped 正在停止的进程
    0 zombie 僵尸进程。如果不是0,需要手工检查僵尸进程

    第三行为CPU信息:

    内容 说明
    Cpu(s): 0.1%us 用户模式占用的CPU百分比
    0.1%sy 系统模式占用的CPU百分比
    0.0%ni 改变过优先级的用户进程占用的CPU百分比
    99.7%id 空闲CPU的CPU百分比
    0.1%wa 等待输入/输出的进程的占用CPU百分比
    0.0%hi 硬中断请求服务占用的CPU百分比
    0.1%si 软中断请求服务占用的CPU百分比
    0.0%st st(Steal time)虚拟时间百分比。

    第四行为物理内存信息:

    内容 说明
    Mem: 625344k total 物理内存的总量,单位KB
    572683k used 已经使用的物理内存数量
    32343k free 空闲的物理内存数量
    64443k buffers 作为缓冲的内存数量

    第五行为交换分区(swap)信息:

    内容 说明
    Swap: 432432k total 交换分区(虚拟内存)的总大小
    0k used 已经使用的交互分区的大小
    544562k free 空闲交换分区的大小
    402354k cached 作为缓存的交互分区的大小

    杀死进程

    查看信号:

    kill -l
    
    信号代号 信号名称 说明
    1 SIGHUP 该信号让进程立即关闭,然后重新读取配置文件之后重启。
    2 SIGINT 程序终止信号,用于终止前台进程。相当于输出ctrl+c快捷键
    8 SIGFPE 在发生致命的算数运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误
    9 SIGKILL 用来立即结束程序的运行,本信号不恩那个被阻塞、处理和忽略。一般用于强制终止进程
    14 SIGALRM 时钟定时信号,计算的是实际的时间或始终时间,alarm函数使用该信号。
    15 SIGTERM 正常结束进程的信号,kill命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL信号,也就是信号9.
    18 SIGCONT 该信号可以让暂停的进程恢复执行,本信号不能被阻断。
    19 SIGSTOP 该信号可以暂停前台进程,相当于输入ctrl+z快捷键。本信号不能被阻断。

    例如,平滑重启:

    kill -HUP 1523
    kill -1 1523
    

    kill加进程号,可以杀死单个进程,killall可以杀死一组进程:

    killall [信号] 进程名
    

    参数:

    • -i 交互式,会提醒是否杀死每个进程
    • -I 忽略大小写

    可以用pkill命令踢出登录用户:

    // 查看当前登录用户
    w
    // 根据tty号踢出用户
    pkill -9 -t [tty]
    pkill -9 -t pts/1
    

    修改进程优先级

    先使用ps查看进程,可以看到PRI和NI两个属性。

    进程的优先级由PRI和NI共同作用,但是PRI值不可修改,可以修改NI的值,实际生效的是PRI值。值越小,优先级越高。

    nice命令可以在创建新进程时修改NI值,但不能修改已存在进程的NI值。

    nice -n -5 service httpd start
    

    使用renice可以修改已存在进程的优先级,但是每次只能修改一个进程:

    renice -10 [PID]
    

    修改NI值注意事项:

    • NI的值的范围是-20到19;
    • 普通用户调整NI值的范围是0到19,而且只能调整自己的进程;
    • 普通用户只能调高NI值,而不能降低,如原本NI值为0,则只能调整为大于0;
    • root用户才能设定进程NI值为负值,而且可以调整任何用户的进程。
    • PRI(最终值) = PRI(原始值) + NI
    • 用户只能修改NI的值,不能直接修改PRI

    工作管理

    简介

    注意事项:

    • 当前的登录终端,只能管理当前终端的工作,不能管理其它登录终端的工作
    • 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作(如ls无意义)
    • 放入后台执行的命令不恩那个和前台用户有交互或需要前台输入(top, vi), 否则放入后台只能暂停,而不能执行

    方法

    有两种方法把进程放入后台:

    • +&: 放入后台执行
    • ctrl + z: 放在后台暂停

    使用jobs命令可以查看后台工作,加-l参数显示工作的PID。

    恢复进程:

    • fg %工作号: 恢复到前台,工作号如[1],不是PID,如fg %1
    • bf %工作号: 恢复到后台

    两个命令如果不加%工作号表示恢复+号的进程。

    后台命令脱离登录终端

    • 第一种方法是把需要后台执行的命令加入/etc/rc.local文件。该文件中的命令会在系统启动时执行,并且不依赖终端。
    • 第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。(不推荐)
    • 第三种方法是使用nohup命令。如nohup /root/run.sh &

    查看系统资源

    vmstat(重要)

    监听系统资源:

    vmstat [刷新延时 刷新次数]
    vmstat 1 3  //每1秒刷新一次,总共刷新3秒
    

    得到输入如下:

    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 7846652 136672  27584 655328    5    8    21    36    3    7  3  1 95  0  0
     0  0 7846652 128356  27600 663732    4    0     4   264 1127 3026  3  1 96  0  0
     0  0 7846652 128356  27600 663740    8    0     8     0 1162 3053  2  1 97  0  0
    
    • procs: 进程信息字段
      • r: 等待运行的进程数,数量越大,系统越繁忙
      • b: 不可被唤醒的进程数量,数量越大,系统越繁忙
    • memory: 内存信息字段
      • swap: 虚拟内存的使用情况,单位KB
      • free: 空闲的内存容量,单位KB
      • buff: 缓冲的内存容量,单位KB
      • cache: 缓存的内存容量,单位KB
    • swap: 交换分区的信息字段
      • si: 从磁盘交换到内存中数据的数量,单位KB
      • so: 从内存中交换到磁盘中数据的数量,单位KB。此两个数越大,证明数据需要经常在磁盘和内存之间交换,系统性能越差。
    • io: 磁盘读写信息字段
      • bi: 从块设备读入数据的总量,单位是块
      • bo: 写到块设备的数据的总量,单位是块。此两个数越大,代表系统的I/O越繁忙
    • system: 系统信息字段
      • in: 每秒被中断的进程次数
      • cs: 每秒钟进行的事件切换次数。此两个数越大,代表系统与接口设备的通信非常繁忙。
    • CPU: CPU信息字段
      • us: 非内核进程消耗CPU运算时间百分比
      • sy: 内核进程消耗CPU运算时间的百分比
      • id: 空闲CPU的百分比
      • wa: 等待I/O消耗的CPU百分比
      • st: 被虚拟机所盗用的CPU占比

    dmesg(重要)

    查看内核信息:

    dmesg
    dmesg | grep CPU
    

    free(重要)

    查看内存使用状态:

    free [-b|-k|-m|-g]
    
    • -b: 以字节为单位显示
    • -k: 以KB为单位显示,默认就是以KB为单位显示
    • -m: 以MB为单位显示
    • -g: 以GB为单位显示

    CPUinfo

    查看CPU信息:

    cat /proc/cpuinfo
    

    proc目录下存放内存信息。

    uptime

    查看登录信息,相当于top命令第一行。

    uname

    查看系统与内核相关的信息。
    参数:

    • -a: 查看系统所有相关信息
    • -r: 查看内核版本
    • -s: 查看内核名称

    file

    查看操作系统位数:

    file /bin/ls
    

    lsb_release

    查看系统发行版:

    lsb_release -a
    

    lsof

    列出进程调用或打开的文件的信息。
    参数:

    • -c 字符串: 只列出以字符串开头的进程打开的文件
    • -u 用户名: 只列出某个用户的进程打开的文件
    • -p pid: 列出某个PID进程打开的文件

    使用示例:

    lsof | more         # 查询系统中所有进程调用的文件
    lsof /sbin/init     # 查询某个文件被哪个进程调用
    lsof -c httpd       # 查看httpd进程调用了哪些文件
    lsof -u root        # 按照用户名,查询某用户的进程调用的文件名
    

    系统定时任务

    at一次性定时任务

    查看at服务:

    chkconfig --list | grep atd     // at服务是否安装
    service atd state   // at服务是否启动
    service atd start   // 启动at服务
    

    at的访问访问控制:

    • 如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会忽略)
    • 如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令。对root不起作用。
    • 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。所以务必要有个at.deny文件,即使是空的。

    at命令:

    • at [选项] 时间
    • 选项:
      • -m: 当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
      • -c 工作号:显示该at工作的实际内容
    • 时间:
      • HH:MM 例如: 02:30
      • HH:MM YYYY-MM-DD 例如02:30 2013-07-25
      • HH:MM[am|pm] [month][date] 例如02:30 July 25
      • HH:MM[am|pm]+[minutes|hours|days|weeks] 例如now + 5 minutes

    示例:

    at now + 2 minutes  // 只告诉时间会在后面提示输入命令
    at> /root/hello.sh
    
    at 02:00 2013-07-26
    

    查看定时任务:

    atq         // 查看定时任务
    at -c 1     // 查看任务详情
    

    删除任务:

    at rm [工作号]
    

    crontab循环定时任务

    访问控制:

    • 当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高。
    • 当系统中只有/et/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令。
    crontab [选项]
    

    选项:

    • -e: 编辑crontab定时任务,格式: * * * * * [命令]
    • -l: 查询crontab任务
    • -r: 删除当前用户所有的crontab任务

    注意事项:

    • crontab是绑定用户身份的,不能执行与身份不符的命令
    • 六个选项都不能为空,必须填写。如果不确定使用"*"代表任意时间。
    • crontab定时任务,最小有效时间是分钟,最大时间范围是月。像2018年某时执行,3点30分30秒这样的时间都不能识别。
    • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为他们都是以天作为单位,两者所在的天都生效,非常容易让管理员混乱。
    • 在定时任务中不管是直接写命令还是在脚本中写命令,最好都是用绝对路径。

    系统定时任务

    执行系统定时任务有两种方法:

    • 第一种是把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个
    • 第二种是修改/etc/crontab配置文件,命令格式* * * * * user command

    anacron配置

    anacron的作用是在系统恢复后,执行故障中未执行的定时任务。

    anacron检测周期:

    • anacron会在一天、七天、一个月作为检测周期
    • 在系统/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间
    • 和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差值,证明有crontab任务被执行

    CentOS 6.x的区别:

    • 在老的CentOS版本中,/etc/cron.{daily,weekly,monthly}这些目录即会被cron调用,也会被anacron调用,容易重复执行
    • 在CentOS 6.x中则只会被anacron调用,避免了重复执行
    • 在CentOS 6.x中,anacron不再是服务,而是系统命令

    anacron配置文件:

    vi /etc/anacrontab
    
    • RANDOM_DELAY=45: 最大随机延迟
    • START_HOURS_RANGE=3-22: anacron的执行时间范围是3:00-22:00
    • 1 5 cron.daily run-parts --report /etc/cron.daily
    • 7 10 cron.weekly run-parts --report /etc/cron.weekly
    • @monthly 15 cron.monthly run-parts --report /etc/cron.monthly
      • 天数 强制延迟(分) 工作名称 实际执行的命令

    cron.daily工作来说明执行过程:

    • 首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间
    • 和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作
    • 执行这个工作只能在03:00-22:00之间
    • 执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间
    • 使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件。
  • 相关阅读:
    7. ZooKeeper的stat结构
    6. ZooKeeper访问控制列表
    5. 监视和ZooKeeper操作
    4. ZooKeeper 基本操作
    3.Apache ZooKeeper数据模型
    Eclipse安装Activiti Designer插件
    Javascript Canvas验证码
    Tomcat9配置SSL连接
    JAVA将异常的堆栈信息转成String
    SpringBoot2静态资料访问
  • 原文地址:https://www.cnblogs.com/suraer/p/9101485.html
Copyright © 2011-2022 走看看