封绝的世界

linux面试总结

进程

10个重要的Linux ps命令实战
如何通过进程查端口
ps aux | grep 进程名
netstat -apn | grep 进程pid
netstat -tlupn (t tcp u udp l listen a ll n ip和端口 p pid和program name)
如何通过全局命令查安装目录
which bash (which指令会在环境变量$PATH设置的目录里查找符合条件的文件。 ll -l 查出来的文件)
whereis -b bash (-b 命令的二进制程序 -m 帮助文件地址 该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。)
ps -aux | grep bash
假如得到了进程号 pid 然后用命令
ll /proc/(pid)/cwd

ps -A //显示当前所有进程(包含1024以内的root进程) 显示PID TTY TIME COMMAND  -u root 显示root进程用户信息  --sort -pcpu(-pmem) | head -n 10 显示前10行
ps aux //显示所有包含其他使用者的行程 u显示较详细的资讯 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 命令所运行的位置(终端)?开机自启动的
STAT: 该行程的状态:

D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

ps -L 进程PID //想知道特定进程的线程
ps -axjf 或者 pstree 虽然都是树形,但展示内容差很多
watch -n 1 'ps -aux --sort -pmem,-pcpu' //并且我们希望结果能够每秒刷新一次

用户

Linux下用于查看系统当前登录用户信息的4种方法

1.w
USER         TTY            FROM          LOGIN@         IDLE            JCPU                                         PCPU                  WHAT
用户名称 用户的机器名称或tty号 远程主机地址  用户登录系统的时间 空闲时间(作用不大)附加到tty(终端)的进程所用的时间(JCPU时间)当前进程所用时间(PCPU时间)用户当前正在使用的命令
2.who
其输出为:用户名、tty号、时间日期、主机地址。
who | cut -d' ' -f1 | sort | uniq  //只希望列出用户
3.whoami命令查看你所使用的登录名称
4.last命令可用于显示特定用户登录系统的历史记录。
用户名称    tty设备号    历史登录时间日期    登出时间日期    总工作时间

主机名和ip

永久改变主机名 sudo hostnamectl set-hostname 修改名
改变ip为固定ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9f802a8b-b0ae-4807-aec1-2d5b1d35524d
DEVICE=ens33
ONBOOT=yes
 
IPADDR=192.168.59.141 
NETMASK=255.255.255.0
GATEWAY=192.168.59.255
DNS1=8.8.8.8
DNS1=114.114.114.114

计划任务

linux计划任务
Ubuntu 计划任务(定时任务)

查看内存使用

free命令用于显示内存状态。包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

top

显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等
前五行是当前系统情况整体的统计信息区。

常用压缩

Ubuntu 常用解压与压缩命令

连接

netstat -atnlp //a所有 t是tcp l是listen p是pid n是替换主机和端口名用ip和端口数
Linux netstat命令详解
如何通过端口查进程
netstat -anp | grep :端口

线程与协程

(1)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。

(2)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。

(3)一个线程可以有多个协程。

查看服务器变慢

整机 top和uptime(top的简化版)
CPU vmstat -n 2 3

procs
r:运行和等待的CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不超过总核数的2倍,否则代表系统压力过大,能发现都超过了2,说明现在压力过大
b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
cpu
us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序
sy:内核进程消耗的CPU时间百分比
us + sy 参考值为80%,如果us + sy 大于80%,说明可能存在CPU不足,从上面的图片可以看出,us + sy还没有超过百分80,因此说明CPU消耗不是很高
id:处于空闲的CPU百分比
wa:系统等待IO的CPU时间百分比
st:来自于一个虚拟机偷取的CPU时间比

查看看所有cpu核信息
mpstat -P ALL 2

每个进程使用cpu的用量分解信息
pidstat -u 1 -p 进程编号

内存 free -m 20%<应用程序可用内存/系统物理内存<70%
查看额为 pidstat -p 进程号 -r 采样间隔秒数

硬盘查看df

磁盘IO查看iostat和pidstat

磁盘块设备分布

rkB/s每秒读取数据量kB;wkB/s每秒写入数据量kB;
svctm lO请求的平均服务时间,单位毫秒;
await l/O请求的平均等待时间,单位毫秒;值越小,性能越好;
util一秒中有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;
rkB/s、wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。
svctm的值与await的值很接近,表示几乎没有IO等待,磁盘性能好。
如果await的值远高于svctm的值,则表示IO队列等待太长,需要优化程序或更换更快磁盘。

查看某个进程的磁盘IO
pidstat -d 2 -p 进程号

网络IO查看ifstat

wget http://gael.roualland.free.fr/lifstat/ifstat-1.1.tar.gz
tar -xzvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure
make
make install

CPU占用过高的定位分析思路

  1. 先用top命令找出CPU占比最高的
  2. ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序作搞屎棍
  3. 定位到具体线程或者代码
    ps -mp 进程 -o THREAD,tid,time
    -m 显示所有的线程
    -p pid进程使用cpu的时间
    -o 该参数后是用户自定义格式

将需要的线程ID转换为16进制格式(英文小写格式)用智能计算器,命令printf %x 172 将172转换为十六进制
jstack 进程ID | grep tid(16进制线程ID小写英文)-A60 (前60行)可以查到具体的行数然后查前后文

https://blog.csdn.net/u011863024/article/details/114684428#t108

posted @ 2022-03-11 15:07  天边的云云  阅读(36)  评论(0编辑  收藏  举报