Ulimit调优
系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。
ulimit 功能简述
假设有这样一种情况,当一台Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。
而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联系。这时,ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。
ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。
# ulimit -a
core file size (blocks,-c) 0 #最大的 core 文件的大小,以 blocks 为单位。
data seg size (kbytes,-d) unlimited #进程最大的数据段的大小,以Kbytes 为单位。
scheduling priority (-e) 0
file size (blocks,-f) unlimited #进程可以创建文件的最大值,以blocks 为单位。
pending signals (-i) 59335
max locked memory (kbytes,-l) 64 #最大可加锁内存大小,以 Kbytes 为单位。
max memory size (kbytes,-m) unlimited #最大内存大小,以Kbytes 为单位
open files (-n) 1024 #可以打开最大文件描述符的数量。
pipe size (512bytes, -p) 8 #管道缓冲区的大小,以 512byte/个为单位。
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes,-s) 10240 #堆栈大小,以 Kbytes 为单位。
cpu time (seconds,-t) unlimited #最大的 CPU 占用时间,以秒为单位。
max user processes (-u) 59335 #用户最大可用的进程数。
virtual memory (kbytes,-v) unlimited #进程最大可用的虚拟内存,以Kbytes 为单位。
file locks (-x) unlimited
-a 显示当前所有的 limit 信息。
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
限制使用CPU时间
# vim /tmp/a.sh
#!/bin/bash
while true
do
:
done
# ulimit -t 20
# ulimit -a | grep "cpu time"
cpu time (seconds, -t) 20
# /tmp/a.sh
Killed
限制用户使用的虚拟内存
# ulimit -v 0
# ls
Killed
# df
Killed
# ps
Killed
# cd /etc
# echo 111
111
# type cd
cd is a shell builtin
# type echo
echo is a shell builtin
限制创建文件大小
# ulimit -f 1000
# dd if=/dev/zero of=file1 bs=1024count=1001
File size limit exceeded (core dumped)
# dd if=/dev/zero of=file1 bs=1024count=900
900+0 records in
900+0 records out
921600 bytes (922 kB) copied, 0.0031932 s,289 MB/s
本文出自 “linux_oracle” 博客,请务必保留此出处http://pankuo.blog.51cto.com/8651697/1392501
redhat5.8-ulimit,布布扣,bubuko.com
原文:http://pankuo.blog.51cto.com/8651697/1392501