操作系统基础
1.cpu占⽤率太⾼了怎么办? 排查思路是什么,怎么定位这个问题,处理流程
其他程序:
1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程
2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程
3.询问开发或者⽼⼤,是什么业务在使⽤这个进程
4.是否可以将这台机器隔离,不影响其他业务
5.然后经过同意后可以杀死或重启进程,然后再观察
2.top⻚⾯中怎么排序能快速看到进程使⽤cpu最⾼
-P
3.HTTP常⻅状态码有哪些?
200 正常
301 永久跳转
302 临时跳转
403 拒绝访问 ⽬录没权限 没有⾸⻚
404 ⻚⾯没找到
500 反向代理后端没有可以响应的服务器
502 反向代理后端没有可以响应的服务器
503 反向代理后端没有可以响应的服务器
4.服务的常⽤端⼝有哪些?
SSH 22
HTTP 80
Nginx 80 1.16.0
HTTPS 443
MySQL 3306 5.7
Redis 6379 5.0
Mongo 27017 4.0
Elasticsearch 9200 9300 7.9
Kibana 5601 7.9
Tomcat 8080 8
5.cpu、内存、流量、⽂件连接数等查询命令
CPU: top uptime
内存: free -h
流量: iftop
磁盘: df -h fdisk -l iotop
⽹络: netstat -lnatup
6.查看进程打开⽂件
ps
-ef #查看进程信息
lsof
-c #显示指定程序名所打开的⽂件
-i #显示符合条件的进程,IPv[46][proto][@host|addr
[:svc_list|port_list]
-p #显示指定进程pid所打开的⽂件
-u #显示指定⽤户UID的进程
+d #列出⽬录下被打开的⽂件
+D #递归累出⽬录下被打开的⽂件
7.实时显示⽹络流量
iftop
-i
-n
-t
8.删除⽂件后磁盘空间不释放
⽂件删了,但是还有进程在使⽤这个⽂件,所以需要终⽌被占⽤的进程.
9./proc⽬录都有什么内容
/proc/cpuinfo #当前CPU信息
/proc/meminfo #当前内存信息
/proc/loadavg #当前系统平均负载信息
/proc/mounts #当前设备挂载表信息
10.raid0 raid1 raid5 raid10 的区别
RAID0
最少1块
容量是所有磁盘加起来的容量
速度最快
安全性最低
RAID1
最少2块
容量是所有磁盘的⼀半
速度⼀般
安全性⾼
RAID5
最少3块
容量是所有磁盘减1块
速度⼀般
安全性较⾼
RAID10
最少4块
容量是所有磁盘⼀半
速度较快
安全性最⾼
11.shell写过什么脚本
思路:
1.先想好功能
2.有能⼒的直接写函数,先写函数名,但是不要写内容
3.最后在填充函数⾥的内容
参考:
#1.拉取代码 git_pull(){ git pull xxxxx }
#2.构建镜像
docker_build(){ docker build -t }
#3.上传harbor
docker_push(){ docker push xxxxx }
#4.远程替换镜像
docker_deploy(){ for i in ip do ssh $i docker pull xxxx && docker stop app && docker rm app && docker run --name app -it xx -d xxxxx done }
#5.主函数
main(){ git_pull docker_build docker_push docker_deploy } main
12.如何查看⼀个进程的端⼝?
netstat -lnatup|grep nginx
13.如何查看当前系统磁盘使⽤量?
df -h
14.给你200台服务器如何规划?
物理服务器:
1.使⽤kickstart+cobbler⾃动化批量装机安装操作系统
2.明确并规划好服务器运⾏的服务
3.编写shell脚本批量⾃动分发SSH密钥
4.使⽤ansible⻆⾊批量安装服务
5.使⽤ansible批量安装监控组件
云服务器:
1.因为云服务器不需要装系统
2.编写shell脚本批量⾃动分发SSH密钥
3.使⽤ansible⻆⾊批量安装服务
15.你们公司服务器的配置是什么?
node节点:
16C 32G
系统盘RAID1 1T SATA
数据盘SSD 500G
不做RAID
数据库:
16C 64G
系统盘RAID1 1T SATA
数据盘RAID10 2T SSD 4块
代码上线:
8C 16G
系统盘RAID1 1T SATA
数据盘RAID10 1T SATA 4块
prometheus:
8C 16G
系统盘RAID1 1T SATA
数据盘RAID10 1T SATA 4块
16.AWK提取⽇志信息,最⾼的IP,排名前10的IP
awk '{nums[$1]+=1;} END{for(i in nums){print nums[i],i}}' access_log | sort | tail
17.编写脚本停⽌正在运⾏的程序
问开发这个程序的停⽌命令是什么?或者是否有停⽌的接⼝地址
停⽌之前确定还是否有其他的服务在使⽤这个程序
我的思路是⾸先⽤ps加grep查出这个进程号,然后使⽤kill 进程号命令结束进程
最后脚本检查程序是否安全退出,然后给出⼀个状态码
kill $(ps -ef|grep nginx|awk ‘{print $2}’)
web服务
1.HTTP常⽤状态码有哪些?分别代表什么意思?
200 正常
301 永久跳转
302 临时跳转
403 拒绝访问 ⽬录没权限 没有⾸⻚
404 ⻚⾯没找到
499 数据库没有响应超时
500 反向代理后端没有可以响应的服务器
502 反向代理后端没有可以响应的服务器
503 反向代理后端没有可以响应的服务器
2.如何保证反向代理服务器的⾼可⽤?
使⽤keepalived的VIP保证⾼可⽤
3.常⽤服务的端⼝ http https ssh mysql redis mongo elasticsearch
http 80
https 443
ssh 22
mysql 3306
redis 6379
mongo 27017
elasticsearch 9200
4.⽤过哪些web服务组件?
nginx
haproxy
tomcat
5.Nginx⽤过哪些模块?作⽤是什么?
ngx_http_core_module 核⼼模块 localtion
ngx_http_rewrite_module 重写模块
ngx_http_proxy_module 反向代理
ngx_http_upstream_module 负载均衡
ngx_http_autoindex_module 索引模块
ngx_http_stub_status_module 状态监控
ngx_http_access_module ⽩名单⿊名单
ngx_http_auth_basic_module 简单认证
ngx_http_limit_req_module 请求限速
6.Nginx如何实现反向代理?反向代理和负载均衡什么关系?
⾸先使⽤反向代理模块将请求发送到后端服务器地址池
然后使⽤负载均衡模块将流量平均负载到后端服务器
通过反向代理实现了流量平均负载到后端服务器
7.web⽹⻚访问慢如何排查?经典问题
现象:
⽤户反映打开⽹⻚速度慢
思路:
1.是某些⽤户慢,还是所有的⽤户都反映慢
2.打开监控,查看服务器内存/CPU/磁盘负载情况
3.打开ELK,查看关键连接的响应时间,是否能查看出规律,⽐如突然某个时间段升⾼,或者间歇性的
4.如果发现某个服务器负载变⾼,导致流量转发到这台服务器的时候慢,那么先把这台服务器从反向代理⾥摘掉,
然后在具体的分析排查问题.
5.如果web服务器负载正常,但是访问慢,那么⼜可能是数据库响应不了或者负载变⾼.
6.通过分析⽇志发现,昨天正常,今天变慢,有可能是因为发布了新版本的代码,数据库语句有变化,可能导致索引
失效
7.查看数据库是否存在慢语句,是否有语句执⾏卡死被锁
8.通过分析慢语句的执⾏计划查看语句是否⾛索引,如果没做索引,可能是因为开发发版了新代码,数据库语句有
变化,可能导致索引失效
9.将执⾏分析结果汇报给⽼⼤,决定是否建⽴合适的索引或者回滚⽼版本,然后再分析问题
10.CDN缓存失效导致请求转发了服务器上
11.DNS解析是否有问题
8.Nginx⽇志怎么处理?多久切割⼀次?
使⽤logrotate定期滚动切割⽇志,每天切割⼀次
我们使⽤了ELK⽇志收集分析平台
9.你们公司并发量有多⼤?PV多少?
PV ⻚⾯访问量 30万-50万 – 150万/天 100M 公⽹带宽 CDN分布式缓存
UV 独⽴访问量 运营那边才能看
10.nginx七层和四层代理的区别
四层代理解析的是端⼝号
七层代理解析的是http的报⽂
四层代理应⽤场景是⾼速转发,不解析http
七层代理的应⽤场景根据解析的域名匹配转发到后端合适的服务器
11.Nginx怎么限流
根据每个IP的请求数基于请求限速模块进⾏限制
12.Nginx有哪些负载均衡算法?
RR 平均轮询
权重轮询
URL
IP_HASH