linux运维工程师面试题总结(一)

时间:2022-02-02 03:07:12

1为什么要有swap分区?工作原理是什么?

 Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。


2.多线程和多进程的区别,喜欢用哪个?为什么?

(思路:先对比线程和进程的优缺点,再结合具体场景介绍,不同场景下喜欢用不同方法。)

进程是资源分配的最小单位,线程是CPU调度的最小单位。


我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受)。

对比维度

多进程

多线程

总结

数据共享、同步

数据共享复杂,需要用IPC;数据是分开的,同步简单

因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂

各有优势

内存、CPU

占用内存多,切换复杂,CPU利用率低

占用内存少,切换简单,CPU利用率高

线程占优

创建销毁、切换

创建销毁、切换复杂,速度慢

创建销毁、切换简单,速度很快

线程占优

编程、调试

编程简单,调试简单

编程复杂,调试复杂

进程占优

可靠性

进程间不会互相影响

一个线程挂掉将导致整个进程挂掉

进程占优

分布式

适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单

适应于多核分布式

进程占优

 

1)需要频繁创建销毁的优先用线程

原因请看上面的对比。

这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的

2)需要进行大量计算的优先使用线程

所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。

这种原则最常见的是图像处理、算法处理。

3)强相关的处理用线程,弱相关的处理用进程

什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。

一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。

当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。

4)可能要扩展到多机分布的用进程,多核分布的用线程

原因请看上面对比。

5)都满足需求的情况下,用你最熟悉、最拿手的方式

至于“数据共享、同步”、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,我只能说:没有明确的选择方法。但我可以告诉你一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。

3./etc/sysctl.conf 这个文件的意义?列举一些常见的kernel参数和作用?

 
/etc/sysctl.conf这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件。

(1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。
 
   (2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。     (3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。     (4)sem:该参数表示设置的信号量。     (5) file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。

 
4.nginx的应用场景? 

nginx应用场景概括

 
      1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
      2、虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
      3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

5.lvs脑裂如何解决,为什么会产生双master?双master时vip通不通?

作者:灯下黑
链接:https://www.zhihu.com/question/50997425/answer/136178424
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  1. 可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处的状态与对方有关。如果主备机器之间的通信出了网题,就会发生脑裂,此时keepalived体系中会出现双主的情况,产生资源竞争。
  2. 一般可以引入仲裁来解决这个问题,即每个节点必须判断自身的状态。最简单的一种操作方法是,在主备的keepalived的配置文件中增加check配置,服务器周期性地ping一下网关,如果ping不通则认为自身有问题 。
  3. 最容易的是借助keepalived提供的vrrp_script及track_script实现。如下所示。
初始的配置:
global_defs {
  router_id LVS_DEVEL
}
vrrp_sync_group VG_1 {
    group {
        VI_1
    }
    notify_master /root/slave2master.py
    notify_backup /root/master2slave.py
}
vrrp_instance VI_1 {
        vrrp_unicast_bind 192.168.150.21
        vrrp_unicast_peer 192.168.150.20
        state BACKUP
        interface manbr
        virtual_router_id 51
        nopreempt
        priority 100
        advert_int 10
        authentication {
            auth_type PASS
            auth_pass XXXX
        }
    virtual_ipaddress {
        192.168.150.23 dev manbr
    }
}
增加仲裁的配置:
global_defs {
    router_id LVS_DEVEL
}
track_script {
    check_local
}
vrrp_script check_local {
    script "/root/check_gateway.sh" 
    interval 5
}
vrrp_sync_group VG_1 {
    group {
        VI_1
    }
    notify_master /root/slave2master.py
    notify_backup /root/master2slave.py
}
vrrp_instance VI_1 {
        vrrp_unicast_bind 192.168.150.21
        vrrp_unicast_peer 192.168.150.20
        state BACKUP
        interface manbr
        virtual_router_id 51
        nopreempt
        priority 100
        advert_int 10
        authentication {
            auth_type PASS
            auth_pass XXXX
        }
    virtual_ipaddress {
        192.168.150.23 dev manbr
    }
}

check_gateway.sh 就是我们的仲裁逻辑,发现ping不通网关,则关闭keepalived service keepalived stop。

该方法在服务器通信正常之后无法再将keepalived启动起来

     注:此文为转载文章,如有侵权,请及时说明。