关于linux的几道题,你能回答几个?--回答21-25题

21. 如何进行性能优化、如何增加开机速度?

21.1 性能优化绝对是一个非常大的问题,影响性能的地方太多,参考如下专题:

http://www.it168.com/redian/linuxmr/

如果面试官问你的思路,那么可以参考:

首先,优化的目的是什么?或者说优化的指标是什么?

(参考http://blog.chinaunix.net/uid-7177878-id-252142.html)

(1)处理器参数

这是一个很简单的参数,它直观的描述了每个CPU的利用率。在xSeries架构中,如果CPU的利用率长时间的超过80%,就可能是出现了处理器的瓶颈。

Runable processes

这个值描述了正在准备被执行的进程,在一个持续时间里这个值不应该超过物理CPU数量的10倍,否则CPU方面就可能存在瓶颈。

Blocked

描述了那些因为等待I/O操作结束而不能被执行的进程,Blocked可能指出你正面临I/O瓶颈。

User time

描述了处理用户进程的百分比,包括nice time。如果User time的值很高,说明系统性能用在处理实际的工作。

System time

描述了CPU花费在处理内核操作包括IRQ和软件中断上面的百分比。如果system time很高说明系统可能存在网络或者驱动堆栈方面的瓶颈。一个系统通常只花费很少的时间去处理内核的操作。

Idle time

描述了CPU空闲的百分比。

Nice time

描述了CPU花费在处理re-nicing进程的百分比。

Context switch

系统中线程之间进行交换的数量。

Waiting

CPU花费在等待I/O操作上的总时间,与blocked相似,一个系统不应该花费太多的时间在等待I/O操作上,否则你应该进一步检测I/O子系统是否存在瓶颈。

Interrupts

Interrupts值包括硬Interrupts和软Interrupts,硬Interrupts会对系统性能带来更多的不利影响。高的Interrupts值指出系统可能存在一个软件的瓶颈,可能是内核或者驱动程序。注意Interrupts值中包括CPU时钟导致的中断(现代的xServer系统每秒1000个Interrupts值)。

(2)内存参数

Free memory

相比其他操作系统,Linux空闲内存的值不应该做为一个性能参考的重要指标,因为就像我们之前提到过的,Linux内核会分配大量没有被使用的内存作为文件系统的缓存,所以这个值通常都比较小。

Swap usage

这个值描述了已经被使用的swap空间。Swap usage只表示了Linux管理内存的有效性。对识别内存瓶颈来说,Swap In/Out才是一个比较又意义的依据,如果Swap In/Out的值长期保持在每秒200到300个页面通常就表示系统可能存在内存的瓶颈。

Buffer and cache

这个值描述了为文件系统和块设备分配的缓存。注意在Red Hat Enterprise Linux 3和更早一些的版本中,大部分空闲内存会被分配作为缓存使用。在Red Hat Enterprise Linux 4以后的版本中,你可以通过修改/proc/sys/vm中的page_cache_tuning来调整空闲内存中作为缓存的数量。

Slabs

描述了内核使用的内存空间,注意内核的页面是不能被交换到磁盘上的。

Active versus inactive memory

提供了关于系统内存的active内存信息,Inactive内存是被kswapd守护进程交换到磁盘上的空间。

(3)网络参数

Packets received and sent

这个参数表示了一个指定网卡接收和发送的数据包的数量。

Bytes received and sent

这个参数表示了一个指定网卡接收和发送的数据包的字节数。

Collisions per second

这个值提供了发生在指定网卡上的网络冲突的数量。持续的出现这个值代表在网络架构上出现了瓶颈,而不是在服务器端出现的问题。在正常配置的网络中冲突是非常少见的,除非用户的网络环境都是由hub组成。

Packets dropped

这个值表示了被内核丢掉的数据包数量,可能是因为防火墙或者是网络缓存的缺乏。

Overruns

Overruns表达了超出网络接口缓存的次数,这个参数应该和packets dropped值联系到一起来判断是否存在在网络缓存或者网络队列过长方面的瓶颈。

Errors

这个值记录了标志为失败的帧的数量。这个可能由错误的网络配置或者部分网线损坏导致,在铜口千兆以太网环境中部分网线的损害是影响性能的一个重要因素。

(4)块设备参数

Iowait

CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

Average queue length

I/O请求的数量,通常一个磁盘队列值为2到3为最佳情况,更高的值说明系统可能存在I/O瓶颈。

Average wait

响应一个I/O操作的平均时间。Average wait包括实际I/O操作的时间和在I/O队列里等待的时间。

Transfers per second

描述每秒执行多少次I/O操作(包括读和写)。Transfers per second的值与kBytes per second结合起来可以帮助你估计系统的平均传输块大小,这个传输块大小通常和磁盘子系统的条带化大小相符合可以获得最好的性能。

Blocks read/write per second

这个值表达了每秒读写的blocks数量,在2.6内核中blocks是1024bytes,在早些的内核版本中blocks可以是不同的大小,从512bytes到4kb。

Kilobytes per second read/write

按照kb为单位表示读写块设备的实际数据的数量。

然后从四个方面来想一些处理

(参考:http://blog.chinaunix.net/uid-26413552-id-3193566.html):

影响性能最大的是应用程序和操作系统两个方面。

Linux操作系统影响性能因素主要有4个方面:CPU,内存,磁盘I/O宽带,网络I/O宽带。

在CPU上,使用支持SMP的linux内存,因为在大部分CPU都是在同一时间内只能运行一个线程,而有SMP(超线程)可以在同一时间内运行多个线程。另外Linux内核会把多核处理器当做多个单独的CPU来识别,但是从性能上讲是不等价的,后者整体性能比较高。

在内存上,内存小会使系统进程堵塞,性能下降。而内存过大,会导致资源浪费。Linux中有虚拟内存和物理内存的概念,可以创建虚拟内存来缓解物理内存的不足,但是如果占用过多的虚拟内存,会造成应用程序的性能明显下降。建议使用64位Linux因为64位操作系统可以使用更大的内存,而且在32位Linux操作系统中,应用程序的单个进程最大只能用2G内存,而64位系统没有这个限制。

在磁盘I/O宽带上,可以使用RAID技术来提高I/O性能。

在网络I/O宽带上,因为现在大多数Linux应用都是基于网络的,所以要建立稳定、高速的带宽。

21.2 如何提高开机速度?

(1)flash/磁盘读写速率

(2)驱动模块剥离、内核裁剪

(3)内存cache

(4)有些服务可以放开机之后启动

22.什么是僵尸进程?

(参考http://blog.chinaunix.net/uid-20633888-id-3024864.html)

1 什么是僵尸进程:

当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出,子进程被init接管,子进程退出后init会回收其占用的相关资源。

2 怎样来清除僵尸进程:

1.改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。这是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管对的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

2.把父进程杀掉。父进程死后,僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

3 僵尸进程的危害:

在Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。

23.什么是大端、小端?

将低序字节存储在起始地址,这称为小端(little-endian)字节序

将高序字节存储在起始地址,这称为大端(big-endian)字节序。

24.什么是主机字节序、网络字节序,二者差别?

X86机器的主机字节序是little endian 将低位字节(就是靠右的字节,比如0x1234,那么34就是低位字节)存储在起始地址(在操作系统中也就是低地址)

网络字节序是big endian是将高位字节存储在起始地址(在操作系统中也就是低地址)

25.RAID0、RAID1、RAID5、RAID10的特点?

(参考http://blog.chinaunix.net/uid-639516-id-2692517.html)

RAID0 (又称为Stripe或Striping--分条)

即Data Stripping数据分条技术。RAID 0可以把多块硬盘连成一个容量更大的硬盘群,可以提高磁 盘的性能和吞吐量。RAID 0没有冗余或错误修复能力,成本低,要求至少两个磁盘,一般只是在那些对数 据安全性要求不高的情况下才被使用。

RAID 0至少需要两块硬盘才能够实现,它的容量为组成这个系统的各个硬盘容量之和,这几块硬盘的容量要相同,在家用IDE RAID中一般级联两块硬盘,一定要用同型号同容量的硬盘。RAID 0模式向硬盘写入数据的时候把数据一分为二,分别写入两块硬盘,读取数据的时候则反之,这样的话,每块硬盘只要负担一半的数据传输任务,得到的结果也就是 速度的增加。

2. RAID 1 (又称为Mirror或Mirroring--镜像)

RAID 1称为磁盘镜像:把一个磁盘的数据镜像到另一个磁盘上,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,具有很高的数据冗余能力,但磁盘利用 率为50%,故成本最高,多用在保存关键性的重要数据的场合。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。

RAID 1有以下特点:

(1)、RAID 1的每一个磁盘都具有一个对应的镜像盘,任何时候数据都同步镜像,系统可以从一组 镜像盘中的任何一个磁盘读取数据。

(2)、磁盘所能使用的空间只有磁盘容量总和的一半,系统成本高。

(3)、只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。

(4)、出现硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。

(5)、更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。

(6)、RAID 1磁盘控制器的负载相当大,用多个磁盘控制器可以提高数据的安全性和可用性。

3. RAID 5 

RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。

4. RAID10

RAID10也被称为镜象阵列条带。象RAID0一样,数据跨磁盘抽取;象RAID1一样,每个磁盘都有一个镜象磁盘, 所以RAID 10的另一种会说法是 RAID 0+1。RAID10提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10提 供最好的性能。使用RAID10,可以获得更好的可靠性,因为即使两个物理驱动器发生故障(每个阵列中一个),数据仍然可以得到保护。RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半(或更小, 如果磁盘大小不一)的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。

RAID总结:


类型


读写性能


安全性


磁盘利用率


成本


应用方面


RAID0


最好(因并行性而提高)


最差(完全无安全保障)


最高(100%)


最低


个人用户


RAID1


读和单个磁盘无分别,写则要写两边


最高(提供数据的百分之百备份)


差(50%)


最高


适用于存放重要数据,如服务器和数据库存储等领域。


RAID5


读:RAID 5=RAID 0(相近似的数据读取速度)

写:RAID 5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入)


RAID 5<RAID 1


RAID 5>RAID 1


RAID 5<RAID 1


是一种存储性能、数据安全和存储成本兼顾的存储解决方案。


RAID10


读:RAID10=RAID0

写:RAID10=RAID1


RAID10=RAID1


RAID10=RAID1(50%)


RAID10=RAID1


集合了RAID0,RAID1的优点,但是空间上由于使用镜像,而不是类似RAID5的“奇偶校验信息”,磁盘利用率一样是50%

时间: 2024-08-03 15:36:56

关于linux的几道题,你能回答几个?--回答21-25题的相关文章

关于linux的几道题,你能回答几个?--回答1~13题

1.memcmp可否用来比较结构体?strcmp和memcpy的区别? 参考:http://www.cnblogs.com/cxz2009/archive/2010/11/11/1875125.html [email protected]:/study/linuxknowledge# cat memcmptest.c #include <stdlib.h> #include <string.h> #include <stdio.h> #include <unist

关于linux的几道题,你能回答几个?--回答14-20题

14.select和poll的区别?Poll和epoll的区别? (1)select和poll的区别:(参考:http://blog.csdn.net/mituan2008/article/details/6695177) 二者根本的不同是:select()的fd_set是一个位掩码(bit mask),因此fd_set有固定的长度.内核在被编译的时候,可以不受这个长度的限制,因为select()允许应用程序自定义FD_SETSIZE的大小,但是这会增加额外的支出. 在调用poll()时需要自定

关于linux的几道题,你能回答几个?

1.memcmp可否用来比较结构体?strcmp和memcpy的区别? 2.软中断和硬中断的区别? 3.进程间通信的几种方式? 4.kmalloc和vmalloc差别? 5.应用层的mmap和内核态的vmalloc对内存访问的差别? 6.用户态是否可以直接访问内核态内存? 7.PCIe中MSI中断如何触发? 8.怎么知道一个文件的大小? 9.spin_lock在单核和多核模式下的区别? 10.多进程时wait用来干什么? 11.进程如果卡住,如何查看卡在哪里? 12.宕机问题如何排查? 13.可

Linux中的 man 命令(2017年9月21日 22:41:20)

输入q,回车就退出: 输入man man,会详细告诉你man手册的使用方法: man手册是学习linux中经常用到的东西 使用方法: 1. man的查询后面的数字含义: 1)  用户在shell换机中可以操作的指令或可执行文件 2)  系统核心可乎叫的函数与工具 3)  一些常用的函数(function)与函数库(library),大部分为c的函数库(libc) 4)  硬件文件说明,通常是/dev/的文件 5 )  配置文件或者是某些档案的格式 6) 游戏(games) 7) 惯例与协议等,例

kali linux 更换更新源,apt-get update报:已下载 25.9 MB,耗时 38秒 (677 kB/s) 正在读取软件包列表... 完成 W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:http://mirrors.ustc.edu.cn/kali kali

正在读取软件包列表... 完成 W: 校验数字签名时出错.此仓库未被更新,所以仍然使用此前的索引文件.GPG 错误:http://mirrors.ustc.edu.cn/kali kali-rolling InRelease: 下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]> W: 无法下载 http://http.kali.org/kali/dists/kali-rolling/InRel

Linux学习笔记十二周三次课 (4月25日)

12.10 Nginx访问日志 vim /usr/local/nginx/conf/nginx.conf //搜索log_format $remote_addr //客户端P(公网IP) $http_x_forwarded_for //代理服务器的IP $time_local //服务器本地时间 $host //访问主机名(域名) $request_uri //访问的url地址 $status //状态码 $http_referer //referer $http_user_agent //us

Oracle中tnsping 主机名/Ip 显示TNS-12541: TNS:no listener

今天是个阴天,老天想下不下的,昏昏沉沉的总想睡觉-- 额--废话不多说了. 今天中午想做一个catalog库,我就在虚拟机上装了Oracle11g,本想不同于target数据库, 所以当时配置监听时就没有用默认的端口号1521,和平常一样,我也懒得手工创建监听, netca创建监听,监听名默认名LISTENER,端口号改为1526: 接着就是启动数据库,注册 alter system register,启动监听,[[email protected] admin]$ lsnrctl start 查

Oracle DataGuard Study之--DataGuard FailOver案例

Oracle DataGuard Study之--DataGuard FailOver案例 Oracle DG(Dataguard)是目前比较常见的数据库HA配置策略.通过实现Physical Standby和Logical Standby,可以实现数据冗余容错机制.防止在主库出现严重故障,不能支持服务的时候,没有快速的后备支持环境. 在DG中,switchover和failover是两个重要的概念,也是DG实现的核心.两者共同点都是Primary和Standby角色切换,差异在于Planned

linux常用命令加实例大全

目  录引言    1一.安装和登录    2(一)    login    2(二)    shutdown    2(三)    halt    3(四)    reboot    3(五)    install    4(六)    mount    4(七)    umount    6(八)    chsh    6(九)    exit    7(十)    last    7(十一)    动手练习    7二.文件处理    9(一)    file    9(二)    mkd