欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux运维面试题总结

程序员文章站 2022-04-18 10:19:49
...

1、11月份每天早上6点到12点之间,每隔两个小时执行脚本xxx.sh

0 6-12/2 * 11 * /usr/bin/xxx.sh
# 基本格式 : 
# *  *  *  *  *  command 
# 分  时  日  月  周  命令 
# 第1列表示分钟1~59 每分钟用*或者 */1表示 
# 第2列表示小时1~23(0表示0点) 
# 第3列表示日期1~31 
# 第4列表示月份1~12 
# 第5列标识号星期0~6(0表示星期天) 
# 第6列要运行的命令 

参数 : 
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数 
来指定使用那个文字编辑器(比如说 setenv VISUAL joe) 
crontab -r : 删除目前的时程表 
crontab -l : 列出目前的时程表 
crontab file [-u user]-用指定的文件替代目前的crontab

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

2、查看日志中访问次数最多的前10个IP

cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

cut参数
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;

sort参数(sort默认是升序)
-n   依照数值的大小排序。
-r   以相反的顺序来排序。

uniq参数
-c或--count 在每列旁边显示该行重复出现的次数。

3、如何修改linux系统打开最大的文件描述符

(1)用户级的限制
通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:

$ulimit -n
1024

当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了。

如果想永久变更需要修改/etc/security/limits.conf 文件,如下:
vi /etc/security/limits.conf
* hard nofile 102400
* soft nofile 102400

保存退出后重新登录,其最大文件描述符已经被永久更改了。

这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。

(2)、系统级的限制
它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
sysctl -w fs.file-max=102400

使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf添加
fs.file-max=102400
保存退出后使用sysctl -p 命令使其生效。

4、写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除

#!/bin/bash
find / -mtime +3  -name "*.log" |xargs rm -rf {} 

1>访问时间(access time 简写为atime)
2>修改时间(modify time 简写为mtime)
3>状态修改时间(change time 简写为ctime)

查看这三种时间:
使用的命令为:
stat filename

5、写一个脚本将某目录下大于100k的文件移动至/tmp下。

#!/bin/bash
find  -size +100k -exec mv {} /tmp 

查找当前目录30天以前大于100M的LOG文件并删除。
#!/bin/bash
find  . -name "*.log" –mtime +30 –type f –size +100M |xargs rm –rf {} 

6、lvs、nginx、haproxy有什么区别?

LVS的优点:
1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
3、应用范围比较广,可以对所有应用做负载均衡;
4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
LVS的缺点:
1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单多了。

 

Nginx的优点:
1、工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;
7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
Nginx的缺点:
1、Nginx不支持url来检测。
2、Nginx仅能支持http和Email,这个它的弱势。
3、Nginx的Session的保持,Cookie的引导能力相对欠缺。

 


HAProxy的优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;

 

LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

区别: LVS由于是基于四层的转发所以只能做端口的转发
而基于URL的、基于目录的这种转发LVS就做不了

工作选择:

HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
配置简单,所以中小型企业推荐使用HAproxy

7、什么叫CDN?

  • 即内容分发网络
  • 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
    最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

CDN就可以理解为分布在每个县城的火车票代售点,用户在浏览网站的时候,CDN会选择一个离用户最近的CDN边缘节点来响应用户的请求,这样海南移动用户的请求就不会千里迢迢跑到北京电信机房的服务器(假设源站部署在北京电信机房)上了。

CDN的优势很明显:(1)CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;(2)大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。

客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,CDN边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个完成http请求结束;如果数据已经过期,那么CDN还需要向源站发出回源请求(back to the source request),来拉取最新的数据。CDN的典型拓扑图如下:

linux运维面试题总结

8、什么叫网站灰度发布?

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度

很多人可能还不是非常了解灰度发布,灰度发布就是将自己的产品首先拿出来给一部分目标人群使用,通过她们的使用结果和反馈来修改产品的一些不足,做到查漏补缺,完善产品的功能,使产品的质量得到提高。这样产品尽早的与用户接触能为以后产品的正式发布打下基础。下面就拿互联网灰度发布来讲一下灰度发布的具体步骤。

第一、确定自己的目标
既然选用了灰度发布这个方法,就首先要确定自己的目标是什么,比如通过让一部门用户先使用产品,从而通过试用结果和用户的反馈来找出产品的不足,从而想办法来提升产品的品质,还有的除了这个目的之外可能还想要借此机会来推广自己的产品。

第二、选择策略
定好目标之后,就要选择策略了,要根据自己产品的规模和功能的多样性来确定互联网灰度发布试用用户的规模和发布的频率,这样才可以提高用户的参与度,全方位的试用产品,这样才能反馈出一个比较全面的结果。

第三、对用户进行筛选
然后就是要对这些用户进行筛选,用户的选择一定要具有代表性,要选择一部分的新用户和一部分的老用户来交替使用产品,还有就是选择的用户要具有敢问好问的精神,善于发现才能发现问题。选择完用户就是产品系统的部署,然后就是对用户参与的结果进行数据分析,找出产品存在的问题。

在上述步骤全都完成之后,互联网灰度发布就基本上是完成了,下面最重要的事情就是全身心的投入对产品的改进中,对产品的不足进行完善,如果产品的漏洞比较大,可以进行再一轮的灰度发布,如果只是一些小问题,那么在修改之后就可以正式的发布了。

9、什么是RabbitMQ?

RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地

高级消息队列
参考此链接 https://www.sojson.com/blog/48.html

10、简述RabbitMQ为什么会发生脑裂,以及如何修复?

参考此链接 http://techlog.cn/article/list/10183027

11、实时抓取并显示当前系统最后那个tcp 80 端口的网络数据信息,请写出完整操作命令

tcpdump -nn tcp port 80

使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log

tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

12、tcp/ip的七层模型

物数网传会表应

13、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线

#!/bin/bash
for ip in `seq 1 255`
 
do
 {
 ping -c 1 192.168.1.$ip > /dev/null 2>&1
 
if [ $? -eq 0 ]; then
 echo 192.168.1.$ip UP
 
else
echo 192.168.1.$ip DOWN
 
fi
 
}&
 
done
 
wait

14、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令

find /application/logs/ -type f -mtime +7 -name "*.log"|xargs rm –f

15、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)

# cat a.sh 
 
#/bin/bash
 
cd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%H`.tar.gz html/
 
# crontab –e
 
00 00 * * * /bin/sh /root/a.sh

16、如何优化 Linux系统(可以不说太具体)?

不用root,添加普通用户,通过sudo授权管理

更改默认的远程连接SSH服务端口及禁止root用户远程连接

定时自动更新服务器时间

配置国内yum源

关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)

调整文件描述符的数量

精简开机启动服务(crond rsyslog network sshd)

内核参数优化(/etc/sysctl.conf)

更改字符集,支持中文,但建议还是用英文字符集,防止乱码

锁定关键系统文件

17、syslog出现大量 ip_conntrack:table full dropping packet,为什么会出现,以及如何修复

iptables 使用一张连接跟踪表,来描述连接状态,当这张表满了,就会在日志里面写入该信息,默认情况下ip_conntrack_max大小为65536。

查看ip_conntrack最大大小:

# cat /proc/sys/net/ipv4/ip_conntrack_max
查看当前ip_conntrack大小:

wc -l /proc/net/ip_conntrack
 

解决方法:更改ip_conntrack大小

# /etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_max = 6553600
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 12
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
# sysctl -p  使其生效
 

这种解决方案,需要在每次iptables重启后,都要执行一遍sysctl -p, 也可以将sysctl -p写入到iptables启动脚本中。 

18、简述raid0 raid1 raid5 三种工作模式的工作原理及特点

RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID整合方式有很多,常用的:0 1 5 10

RAID 0,可以是一块盘和N个盘组合

其优点读写快,是RAID中最好的

缺点:没有冗余,一块坏了数据就全没有了

RAID 1,只能2块盘,盘的大小可以不一样,以小的为准

10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高

RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘

特点,读写性能一般,读还好一点,写不好

冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10

单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5

我们会根据数据的存储和访问的需求,去匹配对应的RAID级别

19、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
Squid、Varinsh和Nginx都是代理服务器

什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你
如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网

区别:

1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业,但是本身不支持特性挺多,只能缓存静态文件
2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术

在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境

工作中选择:
要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。

20、Tomcat和Resin有什么区别,工作中你怎么选择?
区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
但稳定性和java程序的兼容性,应该是比resin的要好

工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容

21、什么是中间件?什么是jdk?
中间件介绍:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口

但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
通过中间件,应用程序可以工作于多平台或OS环境。

jdk:jdk是Java的开发工具包
它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境

22、讲述一下Tomcat8005、8009、8080三个端口的含义?
8005==》 关闭时使用
8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080==》 一般应用使用

23、简述DNS进行域名解析的过程?
用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端

24、讲一下Keepalived的工作原理?
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,
BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息

25、mysql数据备份工具

mysqldump工具

mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump

支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景

Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

基于LVM快照备份

在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录

进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别

而innodb不开启独立表空间的话只能备份整个数据库。

tar包备份

percona提供的xtrabackup工具

支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同

数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展

可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份

26、keepalive的工作原理和如何做到健康检查

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组

这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内

其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了

这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护

及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的

Keepalived健康检查方式配置

HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
 
{
 
url {
 
path /# HTTP/SSL 检查的url可以是多个
 
digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成
 
status_code 200# HTTP/SSL 检查返回的状态码
 
}
 
connect_port 80 # 连接端口
 
bindto<IPADD>
 
connect_timeout 3 # 连接超时时间
 
nb_get_retry 3 # 重连次数
 
delay_before_retry 2 #连接间隔时间
 
}

27、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1

iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080

28、你对现在运维工程师的理解和以及对其工作的认识

运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务

运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失

因此运维工程师的工作需要严谨及富有创新精神

29、Linux系统中病毒怎么解决

1)最简单有效的方法就是重装系统

2)要查的话就是找到病毒文件然后删除

中毒之后一般机器cpu、内存使用率会比较高

机器向外发包等异常情况,排查方法简单介绍下

top 命令找到cpu使用率最高的进程

一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置

rm -f 命令删除病毒文件

检查计划任务、开机启动项和病毒文件目录有无其他可以文件等

3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下

30、发现一个病毒文件你删了他又自动创建怎么解决

公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况

针对这种情况一般重点查看netstat连接的外网ip和端口。

用lsof -p pid可以查看到具体是那些进程,哪些文件

经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了

由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首

查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问

断了内网,病毒就失去外联的能力,杀掉它就容易的多

怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查

方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑

看不到图片就是/usr/bin/.sshd

于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件

然后才删掉了文章开头提到的自动复活的文件

总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统

一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜

一般都能找到元凶。但是如果遇到诸如此类的问题

/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了

31、你常用的Nginx模块,用来做什么

rewrite模块,实现重写功能

access模块:来源控制

ssl模块:安全加密

ngx_http_gzip_module:网络传输压缩模块

ngx_http_proxy_module 模块实现代理

ngx_http_upstream_module模块实现定义后端服务器列表

ngx_cache_purge实现缓存清除功能

32、请列出你了解的web服务器负载架构

Nginx

Haproxy

Keepalived

LVS

33、查看http的并发请求数与其TCP连接状态

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024

不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:

修改/etc/security/limits.conf

* soft nofile 10240
 
* hard nofile 10240

34、用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20

35、请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答)

cut方法1

# ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1
192.168.20.130

awk方法2:

# ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'
 192.168.20.130

awk多分隔符方法3:

# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'
 192.168.20.130

sed方法4:

# ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.*ddr:(.*)Bc.*$##g'
 192.168.20.130

36、请写出下面 linux SecureCRT 命令行快捷键命令的功能?

Ctrl + a —->光标移动到行首

Ctrl + e —->光标移动到行尾

Ctrl + c —->终止当前程序

Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断

Ctrl + l —->清屏

Ctrl + u —->剪切光标以前的字符

Ctrl + k —->剪切光标以后的字符

Ctrl + y —->复制u/k的内容

Ctrl + r —->查找最近用过的命令

tab —->命令或路径补全

Ctrl+shift+c —->复制

Ctrl+shift+v —->粘贴

37、ELK集群怎么优化?

(1) ElasticSearch
index.number_of_shards:36
index.number_of_replicas:0
index.refresh_interval:60s
index.translog.durability:async
index.translog.sync_interval:60s
Mapping.all.enabled:false
client: Bulk write
index.number_of_shards

该参数表示分片的数量,默认是5个分片
分片的数量提升有助于提升写性能,但是也不能太多,太多的话元数据存储压力大
一般来时每个分片的大小最好在32GB左右
number_of_shards = index.size / 32GB
index.number_of_replicas

  • 索引分片副本数量,默认是2
  • 可以在大量导入的时候临时将该参数设成0,大批量导入完成之后再设置回去,能很好的提高些性能

index.refresh_interval

建立的索引,不会立马查到,refresh_interval表示索引刷新的时间间隔,默认为1s
在写优化的时候可以适当将该参数调大一点
index.translog

translog的作用类似有binlog
durability表示translog的持久化方式,默认是request
sync_interval表示translog刷盘的间隔
client

bulk写入能成倍的提升写入性能
建议的bulk大小是:5-15MB

(2)Logstash
worker: 40
batch_size: 150
Input.consumer_threads:5
Output.flush_size:1500
Output.idle_flush_time:30
Output.workers: 20
Filter.grok
单机写入提升: 2000/s -> 18000/s
worker

logstash worker的数量,默认是机器cpu的核心数
logstash的瓶颈一般都在filter上,增大worker的数量,可以有效提升filter的效率
可以设置为略高于CPU核心数
./bin/logstash -w 48 …
batch_size

表示worker一次批量处理的数据条数,默认是150
和ES的bulk写入有关系:worker * batch_size / flush_size = ES bulk index api 调用次数
./bin/logstash -w 48 -b 300 …
Input.consumer_threads

该参数用于标识消费者的线程数,是在logstash.conf中指定的
该参数标识至少会占用kafka的partition的数目
配置的时候需要注意,避免占用过多的partition,导致其他logstash进程饿死
Output.flush_size&Output.idle_flush_time

用来表示flush的大小以及频率
控制着bulk的大小
Filter.grok

grok是logstash的filter插件中的功能,用来对日志数据进行正则匹配实现各个字段的切割
增加锚点可以有效提升性能,比如:^、$等
使用合适的类型去分割字段,尽量避免使用DATA
经过对logstash的优化,可以做到logstash单点导入速度有2000/s 提升到 18000/s