linux优化之进程篇

linux系统中的进程分类:

交互式进程(IO密集型)

批处理进程(cpu密集型)

实时进程(守护进程)

平衡进程IO密集和CPU密集的方法:

对于IO密集型:cpu时间片短,优先级较高

对于cpu密集型:时间片较长,优先级较低

进程优先级

分为实时进程优先级、静态进程优先级、动态进程优先级

实时进程优先级:1-99(数字越小,优先级越低),一般是与系统内核相关的进程

静态优先级:100-139(数字越小,优先级越高),一般是用户空间的进程

实时进程优先级比静态优先级高

动态优先级:当某个进程长时间得不到运行时,内核临时性调高该进程的优先级;或当某个进

程过于占用资源时,会调低优先级。(对象一般是100-139的进程)

调整进程优先级:

创建一个进程时,其默认优先级为120,此时其nice值为0,nice取值范围是-20至19,一共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。可通过nice命令改变一个将要执行的进程的nice值,或通过renice命令修改正在执行的进程的nice值

nice -n 10 bash    #将bash的nice值修改为10,此时优先级为130
renice 5 bash    #将正在运行中的bash进程的nice值加5

进程的调度策略

当两个进程的优先级一样时,就需要一定的调度策略

实时进程调度策略:

SCHED_FIFO:以先进先出的队列方式进行调度,在优先级一样的情况下,谁先执行的就

先调度谁,除非它退出或者主动释放CPU。

SCHED_RR:以时间片轮转的方式对相同优先级的多个进程进行处理。

非实时进程调度策略:

SCHED_OTHER、SCHED_IDLE

使用chrt命令查看和设定进程的调度策略

用法:chrt [options] -p [指定优先级] PID

options:

-f      调度器设成 SCHED_FIFO

-o      调度器设成 SCHED_OTHER

-r      调度器设成 SCHED_RR

[[email protected] ~]# chrt -p 34735    #查看pid为34735的进程属性
pid 34735‘s current scheduling policy: SCHED_OTHER
pid 34735‘s current scheduling priority: 0
# chrt -f -p 50 1000    #将PID 1000 的进程设定成 SCHED_FIFO,优先级设定成50。

# chrt -o -p 0 1000    #将PID 1000 的进程设定成 SCHED_OTHER,优先级设定成0。

# chrt -f 50 /bin/test.sh    #启动 /bin/test.sh 设定成 SCHED_FIFO,优先级设定成50
时间: 2024-10-01 02:16:51

linux优化之进程篇的相关文章

linux学习之进程篇(一)

进程 1.PCB 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内的进程控制块是task_struct结构体.现在我们全面了解一下其中都有哪些信息. 进程标示符(PID):描述本进程的唯一标示符,用来区别其他进程.父进程id(PPID) 进程的状态,有运行.挂起.停止.僵尸等状态. 进程切换时需要保存和恢复的一些CPU寄存器. 描述虚拟地址空间的信息. 描述控制终端的信息. 当前工作目录 umask掩码 文件描述符表,包含很多指向file结构体的指针 和信号相关的信

linux学习之进程篇(二)

进程原语 1.fork #include<unistd.h> pid_t fork(void); fork 子进程复制父进程,子进程和父进程的PID是不一样的,在克隆pcb时,pid没有复制,fork还有底层的函数,如creat(),clone(),retrun 返回.子进程执行的第一条语句是return. #include<stdio.h> #include<unistd.h> #include<stdlib.h> int main(void) { pid

linux学习之进程篇(三)

进程之间的通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进行之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程之间通信(IPC) 进程间通信 1.pipe管道 可以用环形队列实现.队列满的话会阻塞.管道是一种最基本的IPC机制,由pipe函数创建 #include<unistd.h> int pipe(int filedes[2]); 管道作用于有血缘

Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降低了OOM发生的概率.然而,在图片加载方面我们是否可以就此放松警惕了呢? 开源图片加载库能为我们解决绝大部分有关图片的问题,然而并不是所有! 首先,图片从来源上可以分成三大类:网络图片.手机图片.APK资源图片.网络图片和手机图片都在图片加载库功能的覆盖范围内,基本上不用开发者太操心,但是APK资源

浮躁时代的安静角落——《Linux大棚命令百篇》

曾几何时,急功近利.揠苗助长之风吹遍了整个互联网行业,孜孜不倦.循序渐进技术博客Linux大棚成了这个浮躁时代的安静角落,博主多年如一日的积累汇聚成了一本<Linux大棚命令百篇>. 与适合作为系统学习的教材的<循序渐进Linux>不同,<Linux大棚命令百篇>的最大特点就是取材于Linux大棚,以博客系列文章的形式组织全书,在文风轻松生动.诙谐风趣的同时又不失知识的结构化和系统化,不但可以作为案头书,也能在欧阳修的"三上"像读小说一样阅读. 本书

Spark性能优化指南——基础篇

前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作,应用范围与前景非常广泛.在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark.大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快.性能更高. 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的.如果没有对Spar

Linux内核分析——进程的描述和进程的创建

Linux内核分析——进程的描述和进程的创建 20135111李光豫 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

Linux内核学习-进程

先说几个术语: 一.Linux进程的五个段 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的.重点:代码段.数据段.堆栈段,这是一个概念堆.栈.全局区.常量区,这是另一个概念1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像.代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作--它是不可写的.代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域.这部分