㈠ linux kernel可不可以完成进程调度
操作系统要实现多进程,进程调度必不可少。 有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。 所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程。那么进程调度也就不会太重要。哪个进程可执行,就让它执行去,没有什么需要多考虑的。 反之,如果系统负载非常高,时时刻刻都有N多个进程处于可执行状态,等待被调度运行。那么进程调度程序为了协调这N个进程的执行,必定得做很多工作。协调得不好,系统的性能就会大打折扣。这个时候,进程调度就是非常重要的。 尽管我们平常接触的很多计算机(如桌面系统、网络服务器、等)负载都比较低,但是linux作为一个通用操作系统,不能假设系统负载低,必须为应付高负载下的进程调度做精心的设计。 当然,这些设计对于低负载(且没有什么实时性要求)的环境,没多大用。极端情况下,如果CPU的负载始终保持0或1(永远都只有一个进程或没有进程需要在CPU上运行),那么这些设计基本上都是徒劳的。 优先级 现在的操作系统为了协调多个进程的“同时”运行,最基本的手段就是给进程定义优先级。定义了进程的优先级,如果有多个进程同时处于可执行状态,那么谁优先级高谁就去执行,没有什么好纠结的了。 那么,进程的优先级该如何确定呢?有两种方式:由用户程序指定、由内核的调度程序动态调整。(下面会说到) linux内核将进程分成两个级别:普通进程和实时进程。实时进程的优先级都高于普通进程,除此之外,它们的调度策略也有所不同。 实时进程的调度 实时,原本的涵义是“给定的操作一定要在确定的时间内完成”。重点并不在于操作一定要处理得多快,而是时间要可控(在最坏情况下也不能突破给定的时间)。 这样的“实时”称为“硬实时”,多用于很精密的系统之中(比如什么火箭、导弹之类的)。一般来说,硬实时的系统是相对比较专用的。 像linux这样的通用操作系统显然没法满足这样的要求,中断处理、虚拟内存、等机制的存在给处理时间带来了很大的不确定性。硬件的cache、磁盘寻道、总线争用、也会带来不确定性。 比如考虑“i++;”这么一句C代码。绝大多数情况下,它执行得很快。但是极端情况下还是有这样的可能: 1、i的内存空间未分配,CPU触发缺页异常。而linux在缺页异常的处理代码中试图分配内存时,又可能由于系统内存紧缺而分配失败,导致进程进入睡眠; 2、代码执行过程中硬件产生中断,linux进入中断处理程序而搁置当前进程。而中断处理程序的处理过程中又可能发生新的硬件中断,中断永远嵌套不止……; 等等…… 而像linux这样号称实现了“实时”的通用操作系统,其实只是实现了“软实时”,即尽可能地满足进程的实时需求。 如果一个进程有实时需求(它是一个实时进程),则只要它是可执行状态的,内核就一直让它执行,以尽可能地满足它对CPU的需要,直到它完成所需要做的事情,然后睡眠或退出(变为非可执行状态)。 而如果有多个实时进程都处于可执行状态,则内核会先满足优先级最高的实时进程对CPU的需要,直到它变为非可执行状态。 于是,只要高优先级的实时进程一直处于可执行状态,低优先级的实时进程就一直不能得到CPU;只要一直有实时进程处于可执行状态,普通进程就一直不能得到CPU。 那么,如果多个相同优先级的实时进程都处于可执行状态呢?这时就有两种调度策略可供选择: 1、SCHED_FIFO:先进先出。直到先被执行的进程变为非可执行状态,后来的进程才被调度执行。在这种策略下,先来的进程可以执行sched_yield系统调用,自愿放弃CPU,以让权给后来的进程; 2、SCHED_RR:轮转调度。内核为实时进程分配时间片,在时间片用完时,让下一个进程使用CPU; 强调一下,这两种调度策略以及sched_yield系统调用都仅仅针对于相同优先级的多个实时进程同时处于可执行状态的情况。 在linux下,用户程序可以通过sched_setscheler系统调用来设置进程的调度策略以及相关调度参数;sched_setparam系统调用则只用于设置调度参数。这两个系统调用要求用户进程具有设置进程优先级的能力(CAP_SYS_NICE,一般来说需要root权限)(参阅capability相关的文章)。 通过将进程的策略设为SCHED_FIFO或SCHED_RR,使得进程变为实时进程。而进程的优先级则是通过以上两个系统调用在设置调度参数时指定的。 对于实时进程,内核不会试图调整其优先级。因为进程实时与否?有多实时?这些问题都是跟用户程序的应用场景相关,只有用户能够回答,内核不能臆断。 综上所述,实时进程的调度是非常简单的。进程的优先级和调度策略都由用户定死了,内核只需要总是选择优先级最高的实时进程来调度执行即可。唯一稍微麻烦一点的只是在选择具有相同优先级的实时进程时,要考虑两种调度策略。 普通进程的调度 实时进程调度的中心思想是,让处于可执行状态的最高优先级的实时进程尽可能地占有CPU,因为它有实时需求;而普通进程则被认为是没有实时需求的进程,于是调度程序力图让各个处于可执行状态的普通进程和平共处地分享CPU,从而让用户觉得这些进程是同时运行的。 与实时进程相比,普通进程的调度要复杂得多。内核需要考虑两件麻烦事: 一、动态调整进程的优先级 按进程的行为特征,可以将进程分为“交互式进程”和“批处理进程”: 交互式进程(如桌面程序、服务器、等)主要的任务是与外界交互。这样的进程应该具有较高的优先级,它们总是睡眠等待外界的输入。而在输入到来,内核将其唤醒时,它们又应该很快被调度执行,以做出响应。比如一个桌面程序,如果鼠标点击后半秒种还没反应,用户就会感觉系统“卡”了; 批处理进程(如编译程序)主要的任务是做持续的运算,因而它们会持续处于可执行状态。这样的进程一般不需要高优先级,比如编译程序多运行了几秒种,用户多半不会太在意; 如果用户能够明确知道进程应该有怎样的优先级,可以通过nice、setpriority系统调用来对优先级进行设置。(如果要提高进程的优先级,要求用户进程具有CAP_SYS_NICE能力。) 然而应用程序未必就像桌面程序、编译程序这样典型。程序的行为可能五花八门,可能一会儿像交互式进程,一会儿又像批处理进程。以致于用户难以给它设置一个合适的优先级。 再者,即使用户明确知道一个进程是交互式还是批处理,也多半碍于权限或因为偷懒而不去设置进程的优先级。(你又是否为某个程序设置过优先级呢?) 于是,最终,区分交互式进程和批处理进程的重任就落到了内核的调度程序上。 调度程序关注进程近一段时间内的表现(主要是检查其睡眠时间和运行时间),根据一些经验性的公式,判断它现在是交互式的还是批处理的?程度如何?最后决定给它的优先级做一定的调整。 进程的优先级被动态调整后,就出现了两个优先级: 1、用户程序设置的优先级(如果未设置,则使用默认值),称为静态优先级。这是进程优先级的基准,在进程执行的过程中往往是不改变的; 2、优先级动态调整后,实际生效的优先级。这个值是可能时时刻刻都在变化的; 二、调度的公平性 在支持多进程的系统中,理想情况下,各个进程应该是根据其优先级公平地占有CPU。而不会出现“谁运气好谁占得多”这样的不可控的情况。 linux实现公平调度基本上是两种思路: 1、给处于可执行状态的进程分配时间片(按照优先级),用完时间片的进程被放到“过期队列”中。等可执行状态的进程都过期了,再重新分配时间片; 2、动态调整进程的优先级。随着进程在CPU上运行,其优先级被不断调低,以便其他优先级较低的进程得到运行机会; 后一种方式有更小的调度粒度,并且将“公平性”与“动态调整优先级”两件事情合而为一,大大简化了内核调度程序的代码。因此,这种方式也成为内核调度程序的新宠。 强调一下,以上两点都是仅针对普通进程的。而对于实时进程,内核既不能自作多情地去动态调整优先级,也没有什么公平性可言。 普通进程具体的调度算法非常复杂,并且随linux内核版本的演变也在不断更替(不仅仅是简单的调整),所以本文就不继续深入了。 调度程序的效率 “优先级”明确了哪个进程应该被调度执行,而调度程序还必须要关心效率问题。调度程序跟内核中的很多过程一样会频繁被执行,如果效率不济就会浪费很多CPU时间,导致系统性能下降。 在linux 2.4时,可执行状态的进程被挂在一个链表中。每次调度,调度程序需要扫描整个链表,以找出最优的那个进程来运行。复杂度为O(n); 在linux 2.6早期,可执行状态的进程被挂在N(N=140)个链表中,每一个链表代表一个优先级,系统中支持多少个优先级就有多少个链表。每次调度,调度程序只需要从第一个不为空的链表中取出位于链表头的进程即可。这样就大大提高了调度程序的效率,复杂度为O(1); 在linux 2.6近期的版本中,可执行状态的进程按照优先级顺序被挂在一个红黑树(可以想象成平衡二叉树)中。每次调度,调度程序需要从树中找出优先级最高的进程。复杂度为O(logN)。 那么,为什么从linux 2.6早期到近期linux 2.6版本,调度程序选择进程时的复杂度反而增加了呢? 这是因为,与此同时,调度程序对公平性的实现从上面提到的第一种思路改变为第二种思路(通过动态调整优先级实现)。而O(1)的算法是基于一组数目不大的链表来实现的,按我的理解,这使得优先级的取值范围很小(区分度很低),不能满足公平性的需求。而使用红黑树则对优先级的取值没有限制(可以用32位、64位、或更多位来表示优先级的值),并且O(logN)的复杂度也还是很高效的。 调度触发的时机 调度的触发主要有如下几种情况: 1、当前进程(正在CPU上运行的进程)状态变为非可执行状态。 进程执行系统调用主动变为非可执行状态。比如执行nanosleep进入睡眠、执行exit退出、等等; 进程请求的资源得不到满足而被迫进入睡眠状态。比如执行read系统调用时,磁盘高速缓存里没有所需要的数据,从而睡眠等待磁盘IO; 进程响应信号而变为非可执行状态。比如响应SIGSTOP进入暂停状态、响应SIGKILL退出、等等; 2、抢占。进程运行时,非预期地被剥夺CPU的使用权。这又分两种情况:进程用完了时间片、或出现了优先级更高的进程。 优先级更高的进程受正在CPU上运行的进程的影响而被唤醒。如发送信号主动唤醒,或因为释放互斥对象(如释放锁)而被唤醒; 内核在响应时钟中断的过程中,发现当前进程的时间片用完; 内核在响应中断的过程中,发现优先级更高的进程所等待的外部资源的变为可用,从而将其唤醒。比如CPU收到网卡中断,内核处理该中断,发现某个socket可读,于是唤醒正在等待读这个socket的进程;再比如内核在处理时钟中断的过程中,触发了定时器,从而唤醒对应的正在nanosleep系统调用中睡眠的进程。 所有任务都采用linux分时调度策略时: 1,创建任务指定采用分时调度策略,并指定优先级nice值(-20~19)。 2,将根据每个任务的nice值确定在cpu上的执行时间(counter)。 3,如果没有等待资源,则将该任务加入到就绪队列中。 4,调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算权值(counter+20-nice)结果,选择计算结果最大的一个去运行,当这个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。 5,此时调度程序重复上面计算过程,转到第4步。 6,当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。 所有任务都采用FIFO时: 1,创建进程时指定采用FIFO,并设置实时优先级rt_priority(1-99)。 2,如果没有等待资源,则将该任务加入到就绪队列中。 3,调度程序遍历就绪队列,根据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用cpu,该FIFO任务将一直占有cpu直到有优先级更高的任务就绪(即使优先级相同也不行)或者主动放弃(等待资源)。 4,调度程序发现有优先级更高的任务到达(高优先级任务可能被中断或定时器任务唤醒,再或被当前运行的任务唤醒,等等),则调度程序立即在当前任务堆栈中保存当前cpu寄存器的所有数据,重新从高优先级任务的堆栈中加载寄存器数据到cpu,此时高优先级的任务开始运行。重复第3步。 5,如果当前任务因等待资源而主动放弃cpu使用权,则该任务将从就绪队列中删除,加入等待队列,此时重复第3步。 所有任务都采用RR调度策略时: 1,创建任务时指定调度参数为RR,并设置任务的实时优先级和nice值(nice值将会转换为该任务的时间片的长度)。 2,如果没有等待资源,则将该任务加入到就绪队列中。 3,调度程序遍历就绪队列,根据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用cpu。 4,如果就绪队列中的RR任务时间片为0,则会根据nice值设置该任务的时间片,同时将该任务放入就绪队列的末尾。重复步骤3。 5,当前任务由于等待资源而主动退出cpu,则其加入等待队列中。重复步骤3。 系统中既有分时调度,又有时间片轮转调度和先进先出调度: 1,RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 2,当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 3,RR进程和FIFO进程都采用实时优先级做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执行哪一个是由其在队列中的未知决定的,这样导致一些不公正性(优先级是一样的,为什么要让你一直运行?),如果将两个优先级一样的任务的调度策略都设为RR,则保证了这两个任务可以循环执行,保证了公平。 Ingo Molnar-实时补丁 为了能并入主流内核,Ingo Molnar的实时补丁也采用了非常灵活的策略,它支持四种抢占模式: 1.No Forced Preemption (Server),这种模式等同于没有使能抢占选项的标准内核,主要适用于科学计算等服务器环境。 2.Voluntary Kernel Preemption (Desktop),这种模式使能了自愿抢占,但仍然失效抢占内核选项,它通过增加抢占点缩减了抢占延迟,因此适用于一些需要较好的响应性的环境,如桌面环境,当然这种好的响应性是以牺牲一些吞吐率为代价的。 3.Preemptible Kernel (Low-Latency Desktop),这种模式既包含了自愿抢占,又使能了可抢占内核选项,因此有很好的响应延迟,实际上在一定程度上已经达到了软实时性。它主要适用于桌面和一些嵌入式系统,但是吞吐率比模式2更低。 4.Complete Preemption (Real-Time),这种模式使能了所有实时功能,因此完全能够满足软实时需求,它适用于延迟要求为100微秒或稍低的实时系统。 实现实时是以牺牲系统的吞吐率为代价的,因此实时性越好,系统吞吐率就越低。
㈡ 考计算机专业的研究生时考的操作系统是什么系统,是windows、linux、还是unix啊
操作系统考研不针对具体系统,而是针对于操作系统理论知识,当然,可能会涉及到诸如linux和windows中的某些细微的机制。
例如2010年的考纲是这样的:
【考查目标】
1、了解操作系统在计算机系统中的作用、地位、发展和特点。
2、理解操作系统的基本概念、原理,掌握操作系统设计方法与实现技术。
3、能够运用所学的操作系统原理、方法与技术分析问题和解决问题。
一)操作系统概述
(一)操作系统的概念、特征、功能和提供的服务
(二)操作系统的发展与分类
(三)操作系统的运行环境
二)进程管理
(一) 进程与线程
1、进程概念
2、进程的状态与转换
3、进程控制
4、进程组织
5、进程通信:共享存储系统、消息传递系统和管道通信。
6、线程概念与多线程模型
(二)处理机调度
1、调度的基本概念
2、调度时机、切换与过程
3、调度的基本准则
4、调度方式
5、典型调度算法:先来先服务调度算法、短作业(短进程、短线程)优先调度算法优先调度算法、时间片轮转调度算法、优先级调度算法、高响应比优先调度算法和多级反馈队列调度算法。
(三)进程同步
1、进程同步的基本概念
2、实现临界区互斥的基本方法:软件实现方法和硬件实现方法。
3、信号量
4、管程
5、经典同步问题:生产者-消费者问题、读者-写者问题、哲学家进餐问题。
(四)死锁
1、死锁的概念
2、死锁处理策略
3、死锁预防
4、死锁避免:系统安全状态(银行家算法)
5、死锁检测和解除
三)内存管理
(一)内存管理基础
1、内存管理概念
程序装入与链接;逻辑地址与物理地址空间;内存保护。
2、交换与覆盖
3、连续分配管理方式
4、非连续分配管理方式
分页管理方式;分段管理方式;段页式管理方式。
(二)虚拟内存管理
1、虚拟内存基本概念
2、请求分页管理方式
3、页面置换算法:最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最少使用置换算法(LRU)、时钟置换算法(CLOCK)。
4、页面分配策略
5、抖动:抖动现象、工作集。
6、请求分段管理方式
7、请求段页式管理方式
四)文件管理
(一)文件系统基础
1、文件概念
2、文件结构:顺序文件、索引文件、索引顺序文件。
3、目录结构:文件控制块和索引节点、单级目录结构和两级目录结构、树形目录结构、图形目录结构。
4、文件共享
5、文件保护
(二)文件系统实现
1、文件系统层次结构
2、目录实现
3、文件实现
(三)磁盘组织与管理
1、磁盘的结构
2、磁盘调度算法
3、磁盘的管理
五)输入输出(I/O)管理
(一)I/O管理概述
1、I/O设备
2、I/O管理目标
3、I/O管理功能
4、I/O应用接口
5、I/O控制方式
(二)I/O核心子系统
1、I/O调度概念
2、高速缓存与缓冲区
3、设备分配与回收
4、假脱机技术(SPOOLing)
5、出错处理
㈢ linux操作系统有哪五个基本的组成部分
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
操作系统 = 内核 + 系统程序
系统程序 = 编译环境 + API
编译环境 = 编译程序 + 连接程序 + 装载程序
API = 系统调用 + 语言库函数(C、C++、Java等等)
AUI = shell + 系统服务例程(如x服务器等)+ 应用程序(浏览器,字处理,编辑器等)
软件系统 = 操作系统 + AUI
操作系统最底层的组件是内核,其上层搭建了许多系统软件。
系统程序包括三个部分,分别是:编译环境、应用程序接口和用户接口。
编译环境包含汇编、C 等低高级语言编译程序,连接程序和装载程序,这些程序负责将文本格式的程序语言转变为机器能识别和装载的机器代码。
应用程序接口(API)包含内核提供的系统调用接口和语言库,系统调用是为了能让应用程序使用内核服务,语言库函数则是为了方便应用程序开发,所以将一些常用的基础功能预先编译以供使用,比如对C语言来说常用的C库等;
用户接口(AUI)包括我们熟悉的shell、系统服务程序和常用的应用程序。
这是一个典型的结构,但不是一成不变。许多操作系统的发行中会有所删减,比如应用于嵌入式设备的系统,对X服务器就可能不做要求。但是像内核、系统调用等要素是必不可少的。
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
一.Linux内核
内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
二.Linux shell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
三.Linux文件系统
文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、VFAT和ISO9660。
四.Linux应用程序
标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、X
Window、办公套件、Internet工具和数据库等。
㈣ linux操作系统的组成有哪几部分
Linux操作系统主要由五个基本部分组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。
进程调度:控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的程序,可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其他资源,则该进程不可运行进程。Linux使用比较简单的基于优先级的进程调度算法选择新的进程。
内存管理:允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据、堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序则保留在磁盘中。必要时,操作系统负责在磁盘和内存空间交换程序块。
虚拟文件系统:隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2、fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
网络接口:提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
进程间通讯:支持进程间各种通信机制。
㈤ linux系统性能怎么优化
linux系统性能怎么优化
一、前提
我们可以在文章的开始就列出一个列表,列出可能影响Linux操作系统性能的一些调优参数,但这样做其实并没有什么价值。因为性能调优是一个非常困难的任务,它要求对硬件、操作系统、和应用都有着相当深入的了解。如果性能调优非常简单的话,那些我们要列出的调优参数早就写入硬件的微码或者操作系统中了,我们就没有必要再继续读这篇文章了。正如下图所示,服务器的性能受到很多因素的影响。
当面对一个使用单独IDE硬盘的,有20000用户的数据库服务器时,即使我们使用数周时间去调整I/O子系统也是徒劳无功的,通常一个新的驱动或者应用程序的一个更新(如SQL优化)却可以使这个服务器的性能得到明显的提升。正如我们前面提到的,不要忘记系统的性能是受多方面因素影响的。理解操作系统管理系统资源的方法将帮助我们在面对问题时更好的判断应该对哪个子系统进行调整。
二、Linux的CPU调度
任何计算机的基本功能都十分简单,那就是计算。为了实现计算的功能就必须有一个方法去管理计算资源、处理器和计算任务(也被叫做线程或者进程)。非常感谢Ingo Molnar,他为Linux内核带来了O(1)CPU调度器,区别于旧有的O(n)调度器,新的调度器是动态的,可以支持负载均衡,并以恒定的速度进行操作。
新调度器的可扩展性非常好,无论进程数量或者处理器数量,并且调度器本身的系统开销更少。新调取器的算法使用两个优先级队列。
引用
・活动运行队列
・过期运行队列
调度器的一个重要目标是根据优先级权限有效地为进程分配CPU 时间片,当分配完成后它被列在CPU的运行队列中,除了 CPU 的运行队列之外,还有一个过期运行队列。当活动运行队列中的一个任务用光自己的时间片之后,它就被移动到过期运行队列中。在移动过程中,会对其时间片重新进行计算。如果活动运行队列中已经没有某个给定优先级的任务了,那么指向活动运行队列和过期运行队列的指针就会交换,这样就可以让过期优先级列表变成活动优先级的列表。通常交互式进程(相对与实时进程而言)都有一个较高的优先级,它占有更长的时间片,比低优先级的进程获得更多的计算时间,但通过调度器自身的调整并不会使低优先级的进程完全被饿死。新调度器的优势是显着的改变Linux内核的可扩展性,使新内核可以更好的处理一些有大量进程、大量处理器组成的企业级应用。新的O(1)调度器包含仔2.6内核中,但是也向下兼容2.4内核。
新调度器另外一个重要的优势是体现在对NUMA(non-uniform memory architecture)和SMP(symmetric multithreading processors)的支持上,例如INTEL@的超线程技术。
改进的NUMA支持保证了负载均衡不会发生在CECs或者NUMA节点之间,除非发生一个节点的超出负载限度。
三、Linux的内存架构
今天我们面对选择32位操作系统还是64位操作系统的情况。对企业级用户它们之间最大的区别是64位操作系统可以支持大于4GB的内存寻址。从性能角度来讲,我们需要了解32位和64位操作系统都是如何进行物理内存和虚拟内存的映射的。
在上面图示中我们可以看到64位和32位Linux内核在寻址上有着显着的不同。
在32位架构中,比如IA-32,Linux内核可以直接寻址的范围只有物理内存的第一个GB(如果去掉保留部分还剩下896MB),访问内存必须被映射到这小于1GB的所谓ZONE_NORMAL空间中,这个操作是由应用程序完成的。但是分配在ZONE_HIGHMEM中的内存页将导致性能的降低。
在另一方面,64位架构比如x86-64(也称作EM64T或者AMD64)。ZONE_NORMAL空间将扩展到64GB或者128GB(实际上可以更多,但是这个数值受到操作系统本身支持内存容量的限制)。正如我们看到的,使用64位操作系统我们排除了因ZONE_HIGHMEM部分内存对性能的影响的情况。
实际中,在32位架构下,由于上面所描述的内存寻址问题,对于大内存,高负载应用,会导致死机或严重缓慢等问题。虽然使用hugemen核心可缓解,但采取x86_64架构是最佳的解决办法。
四、虚拟内存管理
因为操作系统将内存都映射为虚拟内存,所以操作系统的物理内存结构对用户和应用来说通常都是不可见的。如果想要理解Linux系统内存的调优,我们必须了解Linux的虚拟内存机制。应用程序并不分配物理内存,而是向Linux内核请求一部分映射为虚拟内存的内存空间。如下图所示虚拟内存并不一定是映射物理内存中的空间,如果应用程序有一个大容量的请求,也可能会被映射到在磁盘子系统中的swap空间中。
另外要提到的是,通常应用程序不直接将数据写到磁盘子系统中,而是写入缓存和缓冲区中。Bdflush守护进程将定时将缓存或者缓冲区中的数据写到硬盘上。
Linux内核处理数据写入磁盘子系统和管理磁盘缓存是紧密联系在一起的。相对于其他的操作系统都是在内存中分配指定的一部分作为磁盘缓存,Linux处理内存更加有效,默认情况下虚拟内存管理器分配所有可用内存空间作为磁盘缓存,这就是为什么有时我们观察一个配置有数G内存的Linux系统可用内存只有20MB的原因。
同时Linux使用swap空间的机制也是相当高效率的,如上图所示虚拟内存空间是由物理内存和磁盘子系统中的swap空间共同组成的。如果虚拟内存管理器发现一个已经分配完成的内存分页已经长时间没有被调用,它将把这部分内存分页移到swap空间中。经常我们会发现一些守护进程,比如getty,会随系统启动但是却很少会被应用到。这时为了释放昂贵的主内存资源,系统会将这部分内存分页移动到swap空间中。上述就是Linux使用swap空间的机制,当swap分区使用超过50%时,并不意味着物理内存的使用已经达到瓶颈了,swap空间只是Linux内核更好的使用系统资源的一种方法。
简单理解:Swap usage只表示了Linux管理内存的有效性。对识别内存瓶颈来说,Swap In/Out才是一个比较又意义的依据,如果Swap In/Out的值长期保持在每秒200到300个页面通常就表示系统可能存在内存的瓶颈。下面的事例是好的状态:
引用
# vmstat
procs ———–memory————- —swap– —–io—- –system– —-cpu—-
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 5696 6904 28192 50496 0 0 88 117 61 29 11 8 80 1
五、模块化的I/O调度器
就象我们知道的Linux2.6内核为我们带来了很多新的特性,这其中就包括了新的I/O调度机制。旧的2.4内核使用一个单一的I/O调度器,2.6 内核为我们提供了四个可选择的I/O调度器。因为Linux系统应用在很广阔的范围里,不同的应用对I/O设备和负载的要求都不相同,例如一个笔记本电脑和一个10000用户的数据库服务器对I/O的要求肯定有着很大的区别。
引用
(1).Anticipatory
anticipatory I/O调度器创建假设一个块设备只有一个物理的查找磁头(例如一个单独的SATA硬盘),正如anticipatory调度器名字一样,anticipatory调度器使用“anticipatory”的算法写入硬盘一个比较大的数据流代替写入多个随机的小的数据流,这样有可能导致写 I/O操作的一些延时。这个调度器适用于通常的一些应用,比如大部分的个人电脑。
(2).Complete Fair Queuing (CFQ)
Complete Fair Queuing(CFQ)调度器是Red Flag DC Server 5使用的标准算法。CFQ调度器使用QoS策略为系统内的所有任务分配相同的带宽。CFQ调度器适用于有大量计算进程的多用户系统。它试图避免进程被饿死和实现了比较低的延迟。
(3).Deadline
deadline调度器是使用deadline算法的轮询的调度器,提供对I/O子系统接近实时的操作,deadline调度器提供了很小的延迟和维持一个很好的磁盘吞吐量。如果使用deadline算法请确保进程资源分配不会出现问题。
(4).NOOP
NOOP调度器是一个简化的调度程序它只作最基本的合并与排序。与桌面系统的关系不是很大,主要用在一些特殊的软件与硬件环境下,这些软件与硬件一般都拥有自己的调度机制对内核支持的要求很小,这很适合一些嵌入式系统环境。作为桌面用户我们一般不会选择它。
六、网络子系统
新的网络中断缓和(NAPI)对网络子系统带来了改变,提高了大流量网络的性能。Linux内核在处理网络堆栈时,相比降低系统占用率和高吞吐量更关注可靠性和低延迟。所以在某些情况下,Linux建立一个防火墙或者文件、打印、数据库等企业级应用的性能可能会低于相同配置的Windows服务器。
在传统的处理网络封包的方式中,如下图蓝色箭头所描述的,一个以太网封包到达网卡接口后,如果MAC地址相符合会被送到网卡的缓冲区中。网卡然后将封包移到操作系统内核的网络缓冲区中并且对CPU发出一个硬中断,CPU会处理这个封包到相应的网络堆栈中,可能是一个TCP端口或者Apache应用中。
这是一个处理网络封包的简单的流程,但从中我们可以看到这个处理方式的缺点。正如我们看到的,每次适合网络封包到达网络接口都将对CPU发出一个硬中断信号,中断CPU正在处理的其他任务,导致切换动作和对CPU缓存的操作。你可能认为当只有少量的网络封包到达网卡的情况下这并不是个问题,但是千兆网络和现代的应用将带来每秒钟成千上万的网络数据,这就有可能对性能造成不良的影响。
正是因为这个情况,NAPI在处理网络通讯的时候引入了计数机制。对第一个封包,NAPI以传统的方式进行处理,但是对后面的封包,网卡引入了POLL 的轮询机制:如果一个封包在网卡DMA环的缓存中,就不再为这个封包申请新的中断,直到最后一个封包被处理或者缓冲区被耗尽。这样就有效的减少了因为过多的中断CPU对系统性能的影响。同时,NAPI通过创建可以被多处理器执行的软中断改善了系统的可扩展性。NAPI将为大量的企业级多处理器平台带来帮助,它要求一个启用NAPI的驱动程序。在今天很多驱动程序默认没有启用NAPI,这就为我们调优网络子系统的性能提供了更广阔的空间。
七、理解Linux调优参数
因为Linux是一个开源操作系统,所以又大量可用的性能监测工具。对这些工具的选择取决于你的个人喜好和对数据细节的要求。所有的性能监测工具都是按照同样的规则来工作的,所以无论你使用哪种监测工具都需要理解这些参数。下面列出了一些重要的参数,有效的理解它们是很有用处的。
(1)处理器参数
引用
・CPU utilization
这是一个很简单的参数,它直观的描述了每个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 Flag DC Server 5版本中,你可以通过修改/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为单位表示读写块设备的实际数据的数量。
㈥ Linux下每天自动执行查看磁盘剩余空间的shell文件
1. crontab -e
##编辑文件格式如下
0 6 * * * ~/check.sh
2.编辑check.sh 内容如下:
#!/bin/bash
[email protected] # 你的e_mail
code=`df | grep -c -E \(9[1-9]\%\)\|\(100\%\)` # 判断磁盘的占用有没有超过90%
if [ $code -gt 0 ]
then
df | mail -v -s "subject" $mail - ## 如果有,就发邮件,邮件内容为df 命令的输出(即:磁盘使用统计)
fi
#######################################################chech.sh 文件结束
3. 将check.sh移动到当前用户的home目录下
#######################################################
把你的邮件设置好,就能发了
4. chmod +x check.sh ## 设为可执行
5. /etc/init.d/crond restart ## 重起crond服务
㈦ 请稍等片刻系统正在做最后部署
系统用自由天空的封装工具es3封装的(是制作系统的意思,然后用ghost备份,)封装完就要部署(恢复ghost的备份)一般要30分钟。
Linux是一个多用户多任务操作系统。多用户多用户在同一时间使用电脑系统的多任务Linux的可以执行多个任务的同时,也可以是一个任务,他还没有得到落实,执行另一项任务。
操作系统来管理多用户和多任务的要求。大多数系统都只有一个CPU和主存储器,一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统来管理这些资源和资源共享,在多个用户之间造成你,当你提出请求,一种错觉,好像只有你独自一人占据。事实上,操作系统的等待被执行监视任务队列,这些任务包括用户的工作,操作系统任务,电子邮件和打印作业。操作系统根据每个任务的优先级为每个任务分配合适的时间片,每个时间片大约有零点几秒,虽然看起来很短,但其实有足够的计算机完成成千上万的指令集。每个任务都将是系统运行一段时间,然后挂机系统转向其他任务;回来过了一段时间来处理这个任务,直到任务完成,从任务队列中删除。
跑出来的东西Linux系统的流程和作业可以被称为一个过程。每个用户任务,每个系统管理守护程序,可以称为一个过程。 Linux的分时管理方法使所有的任务共享系统资源。我们所关心的是如何控制这些过程,让他们可以很好的为客户服务。
过程更正式的定义是:一个独立的程序运行在自己的虚拟地址空间。流程和程序是有区别的,该过程是不是一个程序,虽然它是由程序生成的。程序只是一个静态的指令集合,不占系统资源的操作过程中随时可能发生变化的动态,使用的系统资源来运行程序。一个程序可以启动多个进程。
操作的过程和概念是不同的。一个正在执行的进程称为一个作业,作业中可包含一个或多个进程,尤其是当使用管道和重定向命令。
作业控制正在运行的进程的行为进行控制。例如,用户可以暂停一个过程,稍等片刻,然后继续这个过程。 shell来启动的过程中,在每个进程过程中的所有记录,用户可以随心所欲地挂起进程或重新启动该进程。作业控制是许多shell(包括bash和tcsh)的一个特点,允许用户之间进行切换多个独立的业务。
例如,当用户编辑一个文本文件,并需要中止编辑做其他事情时,利用作业控制,用户可以让编辑器暂时挂起,并返回到shell提示符开始做其他的事情。做其他的事情,你可以重新启动挂起的编辑器,返回到刚停下来,如果用户不离开编辑器。这仅仅是一个例子,作业控制,还有很多其他实际用途。
启动这一进程
类型需要运行的程序的程序名的,执行一个程序,其实是启动一个进程。在Linux系统中,每个进程都有一个用于系统识别和调度进程的进程号。主要有两种方式启动一个进程:手动启动和调度启动,这是预先设定的,可根据用户要求,开始自己的。
1,手动启动它
直接输入用户命令启动一个进程是手动启动该进程。手动启动该进程开始在前台和后台可分为启动。
在前台启动手动启动一个进程,是最常见的方式。在一般情况下,用户键入的命令的“ls-升”,这启动了一个过程,和一个前台进程。此时系统已经是多状态的过程中。也许有些用户可能会感到困惑:我只启动一个进程。但实际上有很多在后台运行,系统启动时自动启动的进程正在悄悄运行。有些用户快速后键入“ls-l的”命令“PS-X”来查看,但并没有看到ls的过程,也觉得很奇怪。事实上,这是结束这个进程因为LS太快,使用ps看到该进程已经执行结束。
直接从后台手工启动一个进程用不到,除非这个过程是非常耗时的,用户不急于结果是必要的。假设用户要开始一个长期运行的过程中格式化的文本文件。为了不使整个shell在格式化过程中,在瘫痪状态“是一个明智的选择,从后台启动进程。
2调度启动
有时需要一些更耗费时间和资源密集型的维护工作,该系统适合在半夜,这时候用户可以提前安排,指定任务运行的时间或场合,时间,系统会自动完成所有这些工作。自动启动的过程中,你需要有以下的启动命令。
用户在命令在指定时间执行指定的命令序列的第一个重要的命令在命令其他也就是说,命令至少需要指定一个命令,执行时间可以正常运行在命令允许您只指定时间,也可以是指定的日期和时间。请注意,在指定的时间歧视问题。 :现在,用户可以指定执行时间:3:20在早晨,在当时发出命令的前一天晚上20:00,那么究竟什么是执行命令的日期?如果用户仍然在工作前3: 20,则该命令将在这个时候完成退出工作状态,如果用户在3:20之前,那么该命令将被执行,只有在第二天清晨以下命令语法:
[-V] [-Q队列] [-f文件名] [-mldbv]时间
AT-C工作[工作]
>允许使用一个非常复杂的方法,指定的时间,它可以接受在当天为hh:mm(小时:分钟)指定的时间,如果时间已过,然后在第二天执行,当然,也可用于午夜(深夜),中午(中午),更晦涩难懂的话下午茶(下午茶时间,通常为16:00)指定的时间,用户还可以使用12小时制,也就是后面的时间AM(上午)或PM(下午)来说明在上午或下午,也可以指定命令执行指定日期格式月份的一天(月日)或MM / DD / YY(月/日/年)或DD.MM.YY(月,年)指定的日期必须遵循在后面指定时间。
上述是绝对的计时方法,其实,你可以使用相对计时法,这是很不错的,要执行的命令安排指定的格式为:+计时单位,现在是当前时间,时间单位是一个单位时间,可以是分钟(分钟),小时数(h),天数(天),周(周)计数的时间量,无论是几天或几个小时,等等。
是一个时序方法用于直接指定命令完成今日(今天),明天(明天)。下面一些例子来说明具体用法。假设现在的时间是
[例]今天下午5:30在指定执行命令。 2月24日中午12:30,2001年,命令格式如下:
在下午5:30
在17:30
今天在17:30
现在+ 5小时
现在+ 300分钟
17:30 24.2.99
17:30 2/24/99
在17:30 2月24日
这些命令的表达更重要的意义是完全一样的,所以时间完全自由地选择根据个人喜好和情况,一般采用绝对时间的24小时时钟,以避免导致时序错误发生由于用户自己的疏忽,例如,上面的例子可以写成:
17:30 2/24/99
这是很清楚的,和其他人理解。
at命令自动执行的命令从标准输入或使用-f选项指定的文件读取和执行命令从一个使用su命令切换到用户shell,则当前用户被认为是执行用户,所有的错误和输出将被发送到用户但是,如果发送电子邮件,收到的消息将是原来的用户登录shell的所有者。作业文件的工作,在7月31日上午10时许。
在任何情况下,超级用户可以使用此命令。对于其他用户,是否可以使用取决于两个文件:在/ etc / at.allow和/ etc / at.deny中中。
cron命令<BR /上述两个命令完成某些任务,在一定时间内,但要知道,他们只能执行一次,换句话说,指定运行命令时,系统完成的任务在指定的时间,一切都结束了。但在许多情况下,需要到被重复一个几个命令,如:一家公司的自动报告员工公司的活动,一个星期的第一周,这个时候你需要使用完成任务cron命令。cron命令不应手动启动它,cron命令在系统启动时自动启动,进入后台(所以没有必要使用的符号(&))的用户没有权限运行该命令由一个shell脚本,虽然超用户可以手动启动cron,但它建议把由系统自行启动shell脚本。
cron命令搜索找到在/ var / spool / cron内目录中的用户名/ etc / passwd文件名为crontab文件,这个文件被发现,将被加载到内存中。例如,一个的用户名为狡猾用户的,它所对应的crontab文件/ var / spool / cron内/狡猾的,换句话说,用户名为crontab文件存储在/ var / spool / cron内目录搜索的/ etc / crontab文件,这是写在不同的格式。cron命令cron的启动,它会首先检查用户是否设置crontab文件,如果不转移到“休眠”状态,释放系统资源。后台进程占用资源非常少,它每分钟“醒了”随着时间的推移,看是否有当前需要运行的命令,执行命令后,任何输出将发送电子邮件的crontab的所有者,或者在/ etc / crontab文件中MAILTO环境变量中指定的用户。上面简单的介绍一些的cron cron命令执行的工作原理不需要用户干预,要求用户的顺序执行crontab命令,下面的crontab命令。
crontab命令用于安装,删除,crontab命令或列表形式用来驱动cron守护进程。换句话说,用户需要到执行的命令序列到crontab文件执行。每个用户都可以有自己的crontab文件。下面看看如何创建一个crontab文件。在/ VAR / spool / cron内的crontab文件不能直接创建或crontab文件crontab命令。现在假设一个用户名为狡猾需要创建自己的crontab文件。首先,你可以使用任何文本编辑器来创建一个新的文档,然后向其中写入需要运行的定期要执行的命令,然后保存并退出。假设文件/ tmp / test.cron中,然后使用crontab命令将文件安装到用户的crontab文件。类型: crontab test.cron的
创建一个crontab文件,你可以去到/ var / spool / cron内的目录看看,发现了一个狡猾的文件,这个文件是必需的crontab文件。
如何在crontab文件中输入要执行的命令和时间。文件中的每一行由六个域,其中前五个字段指定命令执行的时间,最后一个域是要执行的命令。使用每个域之间的一个空格或制表符分隔的格式如下:
分钟小时一天一个月月的一年一天一周命令
第二个小时的第一分钟,3个月的一天,第四个是在今年的前几个月,在一周的第五天,第六个是要执行的命令,这些项目不能为空,必须填补。如果你不需要指定一些这些,你可以用*代替*通配符,可以代替任何字符,所以在任何时间,也就是忽略不计。
过程暂停和恢复命令允许进程被暂停和恢复过程BG FG
作业控制,当你需要它来运行,待就业的复苏从流产后开始继续运行。在键盘上按ctrl + Z来挂起当前的前台作业。键盘,按下CTRL + Z将暂停当前执行的命令cat使用jobs命令显示的列表操作的外壳,包括具体的工作,工作数量和工作电流。状态。执行恢复过程中,有两个选项:作业将挂起fg命令把它放回在前台操作bg命令在后台开始将挂起。灵活在使用该命令,将带来极大的方便。
进程查看器
,由于Linux是一个多用户的系统,有时候也要了解其他用户现在正在做的,而Linux是一个多进程系统,部署和管理这些过程往往需要和管理过程:首先,我们必须知道到底是什么过程?过程?等过程,因此有必要查看工作
命令时,
命令主要用于查看当前在线用户,这个命令非常有用,如果用户希望创建即时消息和其他用户,如使用talk命令,你必须首先确定的,用户在网上做,或谈话过程中不能成立。又如,系统管理员希望监视每个登录的用户此刻的行动,但也使用谁命令谁命令的应用程序是非常简单的,你可以更准确地把握用户的情况,它被广泛使用。
w命令
命令也用于显示登录到系统的用户,但谁是w命令功能更强大的,它可以不仅谁登录到系统,还可以显示这些用户的工作进展,并统计相对更详细和科学的增强版本,w命令是谁的命令。命令w命令显示项目按以下顺序:当前时间,系统启动到现在的时间,记录的数量的用户,该系统在过去1秒,5秒和15秒的平均负载。然后,每个用户的数据,该项目的显示顺序如下的时间是指:登录帐号,终端名称,远程主机名,登录时间,空闲时间,JCPU,PCPU当前正在运行的进程的命令行。JCPU所花费的时间和终端(tty)连接的所有进程。这时候不包括过去的后台作业,但它不包括当前正在运行的后台作业所占用的时间。PCPU时间是指由当前进程所占用的时间(即程序)的项目。
ps命令 BR /> ps命令是最基本的命令也是非常强大的进程查看器,使用此命令可以决定哪些进程正在运行和运行状态,这个过程是,僵尸进程,哪些进程占用了过多的资源,等等总之,大多数的信息通过执行命令。
ps命令最常用的监控后台进程的工作,因为后台进程是不沟通这些标准和屏幕上的键盘输入/输出设备,所以如果需要检测其状态,他们可以使用ps命令。
ps [选项]
下面的命令选项说明:
>
-E显示所有进程。
-F格式。
h不显示标题。
- L的长格式。
-W宽输出。
显示终端的进程,包括其他用户的进程。
R只正在运行的进程。
X显示没有控制终端的进程。
O [+ | - ] K1 [+ | - ] K2 [,...]]短按键,K1, K2的快捷键指定的多级排序顺序的进程列表。诗有不同的格式,在指定的缺省值。这些默认顺序可以由用户指定的覆盖面。“+”字符是可选的,其中的方向,“ - ”字符被反转指定键。
最常用的三个参数U,一,X
top命令的
top命令和ps命令的是相同的,显示目前的流程,和其他条件,但顶部是一个动态的过程,即通过用户按键来刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止程序更准确的说,top命令提供了实时监控系统处理器的状态,它会显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用,内存使用率和执行时间对任务进行排序;许多交互式命令或者在个人定制文件的命令集的特点。
进程调度
当你需要中断一个前台进程时,他们通常使用至于有很多理由要杀背景按Ctrl + C组合键,但对于一个后台进程,恐怕它不是一个组合键就可以解决,那么你必须打开kill命令,该命令可以终止后台进程。这个过程中所消耗的过程,也许太多的CPU时间,也许过程已经挂。总之,这种情况经常发生。
kill命令发送指定的信号给进程的结束过程。如果发送的信号不指定,则默认值为TERM信号。TERM信号将终止所有的进程永远不能捕捉到的信号。谁可以捕捉信号的过程中,可能需要使用kill(9)信号,信号不能被捕获。
kill命令语法很简单,基本上有两种方式:
杀[-s信号|-P] [-a〕进程ID ...
杀-L [信号]
㈧ 谁有linux i/o 调度算法deadline,anticipatory,noop,cfq中各个调优参数的具体作用。
1.Deadline scheler Deadline scheler 用 deadline 算法保证对于既定的 IO 请求以最小的延迟时间,从这一点理解,对于 DSS 应用应该会是很适合的。
2.Anticipatory scheler(as) 曾经一度是 Linux 2.6 Kernel 的 IO scheler 。Anticipatory 的中文含义是”预料的, 预想的”, 这个词的确揭示了这个算法的特点,简单的说,有个 IO 发生的时候,如果又有进程请求 IO 操作,则将产生一个默认的 6 毫秒猜测时间,猜测下一个 进程请求 IO 是要干什么的。这对于随即读取会造成比较大的延时,对数据库应用很糟糕,而对于 Web Server 等则会表现的不错。这个算法也可以简单理解为面向低速磁盘的,因为那个”猜测”实际上的目的是为了减少磁头移动时间。
3.Completely Fair Queuing 虽然这世界上没有完全公平的事情,但是并不妨碍开源爱好者们设计一个完全公平的 IO 调度算法。Completely Fair Queuing (cfq, 完全公平队列) 在 2.6.18 取代了 Anticipatory scheler 成为 Linux Kernel 默认的 IO scheler 。cfq 对每个进程维护一个 IO 队列,各个进程发来的 IO 请求会被 cfq 以轮循方式处理。也就是对每一个 IO 请求都是公平的。这使得 cfq 很适合离散读的应用(eg: OLTP DB)。我所知道的企业级 Linux 发行版中,SuSE Linux 好像是最先默认用 cfq 的.
4.NOOP Noop 对于 IO 不那么操心,对所有的 IO请求都用 FIFO 队列形式处理,默认认为 IO 不会存在性能问题。这也使得 CPU 也不用那么操心。当然,对于复杂一点的应用类型,使用这个调度器,用户自己就会非常操心。
㈨ linux服务器的优点
很多人都认为Linux服务器具有最好的生态系统,服务器端的各种软件都为它而设计。Linux系统之所以会成为目前最受关注的系统之一,主要原因是它的免费,以及系统的开放性,可以随时取得程序的原代码,这对于程序开发人员是很重要的。除了这些它还具有以下的优势:
Linux服务器优势1:良好的稳定性
Linux内核的源代码是以标准规范的32位(在64位CPU上是64位)的计算机来做的最佳化设计,可确保其系统的稳定性。正因为Linux的稳定,才使得一些安装Linux的主机像Unix机一样常年不关而不曾宕机。
Linux服务器优势2:丰富的软件支持
与其他的操作系统不同的是,安装了Linux系统后,用户常用的一些办公软件、图形处理工具、多媒体播放软件和网络工具等都已无需安装。而对于程序开发人员来说,Linux更是一个很好的操作平台,在Linux的软件包中,包含了多种程序语言与开发工具,如gcc、cc、C++、Tcl/Tk、Perl、Fortran77等。
Linux服务器优势3:可靠的安全性
Linux系统是一个具有先天病毒免疫能力的操作系统,很少受到病毒攻击。
对于一个开放式系统而言,在方便用户的同时,很可能存在安全隐患。不过,利用Linux自带防火墙、入侵检测和安全认证等工具,及时修补系统的漏洞,就能大大提高Linux系统的安全性,让黑客们无机可乘。
Linux服务器优势4:完善的网络功能
Linux内置了很丰富的免费网络服务器软件、数据库和网页的开发工具,如Apache、Sendmail、VSFtp、SSH、MySQL、PHP和JSP等。近年来,越来越多的企业看到了Linux的这些强大的功能,利用Linux担任全方位的网络服务器。
Linux服务器优势5:多用户多任务
和Unix系统一样,Linux系统是一个真正的多用户多任务的操作系统。多个用户可以各自拥有和使用系统资源,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响,同时多个用户可以在同一时间以网络联机的方式使用计算机系统。多任务是现代计算机的最主要的一个特点,由于Linux系统调度每一个进程是平等地访问处理器的,所以它能同时执行多个程序,而且各个程序的运行是互相独立的。
Linux服务器优势6:跨平台的硬件支持
由于Linux的内核大部分是用C语言编写的,并采用了可移植的Unix标准应用程序接口,所以它支持如i386、Alpha、AMD和Sparc等系统平台,以及从个人电脑到大型主机,甚至包括嵌入式系统在内的各种硬件设备。
Linux在它的追捧者眼里是一个近乎完美的操作系统,它具有运行稳定、功能强大、获取方便等优点,因而有着广阔的前景。只要你不是有什么特殊的需求,那么你就可以采用Linux系统。可参考书籍《Linux就该这么学》了解更多Linux知识。