00. 目录
01. 命令概述
nice命令用于以指定的进程调度优先级启动其他的程序。
系统的后台工作中,某些比较不重要的进程在运行,例如备份,由于备份工作相当耗系统资源,这个时候就可以调大备份命令的nice值,可以使系统资源更合理使用。
02. 命令格式
用法:
renice [-n] <优先级> [-p|--pid] <pid>...
renice [-n] <优先级> -g|--pgrp <pgid>...
renice [-n] <优先级> -u|--user <用户>...
- 1
- 2
- 3
- 4
03. 常用选项
选项:
-g, --pgrp <id> 将参数解释为进程组 ID
-n, --priority <数字> 指定 nice 增加值 范围在-20~19
-p, --pid <id> 将参数解释为进程 ID (默认)
-u, --user <name|id> 将参数解释为用户名或用户 ID
-h, --help 显示帮助文本并退出
-V, --version 显示版本信息并退出
- 1
- 2
- 3
- 4
- 5
- 6
- 7
04. 参考示例
4.1 设置进程优先级为19
[root@itcast ~]# nice -n 19 vim &
[1] 18565
- 1
- 2
4.2 新建一个进程并设置优先级19
新建一个进程并设置优先级,将/etc目录打包,但不希望tar占用太多CPU:
[root@itcast ~]# nice -19 tar -czvf test.tar.gz /etc
- 1
方法非常简单,即在原命令前加上nice -19
。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望/etc目录打包,并且赋予tar进程最高的优先级:
4.3 新建一个进程并设置优先级-19
[root@itcast ~]# nice --19 tar -czvf test.tar.gz /etc
- 1
4.4 设置优先级并且查看
[root@itcast ~]# nice -n -5 vim &
[2] 29010
[root@itcast ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 T 0 29010 109841 1 75 -5 - 37522 do_sig pts/0 00:00:00 vim
0 R 0 29191 109841 0 80 0 - 38300 - pts/0 00:00:00 ps
4 S 0 109803 63226 0 80 0 - 58600 do_wai pts/0 00:00:00 su
4 S 0 109841 109803 0 80 0 - 29215 do_wai pts/0 00:00:00 bash
[root@itcast ~]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
对于普通用户来说,只可以以更低优先级运行命令,更高优先级运行命令需要高级用户权限。
nice命令不允许普通系统用户增加命令的优先级。这是一个安全特性,防止用户以高优先级启动所有命令。
很明显nice命令是为未运行命令指定运行时调度优先级的。
05. 附录
1、基础概念
内存泄漏检测机制作为内核的可选功能,用于辅助定位动态内存泄漏问题。开启该功能,动态内存机制会自动记录申请内存时的函数调用关系(下文简称LR)。如果出现泄漏,就可以利用这些记录的信息,找到内存申请的地方,方便进一步确认。
2、功能配置
- LOSCFG_MEM_LEAKCHECK:开关宏,默认关闭;若打开这个功能,在target_config.h中将这个宏定义为1。
- LOSCFG_MEM_RECORD_LR_CNT:记录的LR层数,默认3层;每层LR消耗sizeof(void *)字节数的内存。
- LOSCFG_MEM_OMIT_LR_CNT:忽略的LR层数,默认4层,即从调用LOS_MemAlloc的函数开始记录,可根据实际情况调整。为啥需要这个配置?有3点原因如下:
- LOS_MemAlloc接口内部也有函数调用;
- 外部可能对LOS_MemAlloc接口有封装;
- LOSCFG_MEM_RECORD_LR_CNT 配置的LR层数有限;
正确配置这个宏,将无效的LR层数忽略,就可以记录有效的LR层数,节省内存消耗。
3、开发指导
3.1开发流程
该调测功能可以分析关键的代码逻辑中是否存在内存泄漏。开启这个功能,每次申请内存时,会记录LR信息。在需要检测的代码段前后,调用LOS_MemUsedNodeShow接口,每次都会打印指定内存池已使用的全部节点信息,对比前后两次的节点信息,新增的节点信息就是疑似泄漏的内存节点。通过LR,可以找到具体申请的代码位置,进一步确认是否泄漏。
调用LOS_MemUsedNodeShow接口输出的节点信息格式如下:每1行为一个节点信息;第1列为节点地址,可以根据这个地址,使用GDB等手段查看节点完整信息;第2列为节点的大小,等于节点头大小+数据域大小;第3~5列为函数调用关系LR地址,可以根据这个值,结合汇编文件,查看该节点具体申请的位置。
node size LR[0] LR[1] LR[2]
0x10017320: 0x528 0x9b004eba 0x9b004f60 0x9b005002
0x10017848: 0xe0 0x9b02c24e 0x9b02c246 0x9b008ef0
0x10017928: 0x50 0x9b008ed0 0x9b068902 0x9b0687c4
0x10017978: 0x24 0x9b008ed0 0x9b068924 0x9b0687c4
0x1001799c: 0x30 0x9b02c24e 0x9b02c246 0x9b008ef0
0x100179cc: 0x5c 0x9b02c24e 0x9b02c246 0x9b008ef0
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: