1. 操作系统、线上操作、加密与安全等

1.1. 简介

报考岗位为 2025年 信息支援部队某单位-数据分析与管理 岗位。

1.2. 详细内容

进程之间如何通信的?线程如何切换?

cpu执行线程的时候,有时间片算法,一个线程先执行一段时间,然后保存状态及数据,切换到其他线程再执行一段时间。

进程通信方式:

  1)管道通信:要求有血缘关系(父子进程),没有名称,半双工,一个进程写一个进程读
  2)命名管道:可以没有血缘关系,类似文件,半双工,一个进程写,一个进程读
  3)消息队列:链表结构,一个发送消息,一个消费消息,可以指定消息类型,linux内核有一个msgque链表
  4)共享内存:多个进程操作一块共享内存,需要结合锁来使用

线上cpu过高

1、定位cpu过高的进程

top -c 显示进程列表,然后输入P,按照cpu使用率排序

2、定位耗费cpu的线程

top -Hp <进程id> 然后输入P,按照cpu使用率排序

3、定位哪行代码导致cpu过高

printf "%x\n" <线程id> 把线程id转换成16进制
jstack <进程id> | grep '0x<线程id16进制>' -C5 --color 打印进程的堆栈信息

线程杀不死

因为子进程释放资源后没有得到父进程确认,导致变成僵尸进程,就是zombie状态

先杀掉父进程,再杀子进程:ps aux,看STAT列,如果是Z,就是zombie状态的僵尸进程。

查找父进程id:ps -ef | grep 僵尸进程id

文件过大如何查找清理

查看磁盘使用情况:df -h
查看日志文件等是否过大,删除,可以调整日志文件,按天切割,写shell脚本,crontab定时,定期删除7天以前的日志。
找找大于100M的文件:find / -size+100M | xargs ls -lh
查看各个目录是否有大量小文件:du -h > fs_du.log

查看日志常用命令

1.查询日志中含有某个关键字的信息

cat app.log |grep 'error'

2.查询日志尾部最后10行的日志

tail -n 10 app.log

3.查询10行之后的所有日志

tail -n +10 app.log

4.查询日志文件中的头10行日志

head -n 10 app.log

5.查询日志文件除了最后10行的其他所有日志

head -n -10 app.log

6.查询日志中含有某个关键字的信息,显示出行号(在1的基础上修改)

cat -n app.log |grep 'error'

7.显示102行,前10行和后10行的日志

cat -n app.log |tail -n +92|head -n 20

8.根据日期时间段查询(前提日志总必须打印日期,先通过grep确定是否有该时间点)

sed -n '/2018-06-01 16:00:20/,/2018-06-01 16:06:36/p' app.log

9.使用more和less命令(分页查看,使用空格翻页)

cat -n app.log |grep "error" |more

10.把日志保存到文件

cat -n app.log |grep "error" > temp.txt

11.将指定时间的日志导入到文件中

cat -n logs/catalina.out '/2018-06-08 00:00:20/,/2018-06-06 16:06:36/p' > pay.out

12.查询日志按指定规则过滤并打印附近 10行 日志

cat logs/game-scene-server.log | grep -C10 "game/join/instance/not/models" | grep "10019015824572421" | more

13.对日志文件的IP值次数进行统计 并 显示次数最多的前六名

grep -i -o -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test1.txt | sort -n | uniq -c | sort -n -r | head -6

参数详情:
grep命令 用于文本搜索
    -E:用于使用正则匹配
    -o:只显示匹配的部分
    -i:忽略大小写
sort命令用于排序
    -n:数值排序
    -r:倒序排序
uniq命令用于去重
    -c:显示重复次数
head -6 命令显示前6行

results matching ""

    No results matching ""