在Linux系统中,每个进程都有一个唯一的进程ID(PID)。PID是由内核分配给进程的,以便在系统中识别和管理进程。每个进程都可以拥有一些资源,如CPU时间、内存和文件句柄等。然而,这些资源是有限的,因此,操作系统需要在运行时控制它们的使用。
创新互联公司专注于曲水网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供曲水营销型网站建设,曲水网站制作、曲水网页设计、曲水网站官网定制、小程序制作服务,打造曲水网络公司原创品牌,更为您提供曲水网站排名全网营销落地服务。
在Linux系统中,有一个函数叫做getrlimit可以查询系统资源限制。想要了解某个进程的资源限制,只需要使用该进程的PID作为参数,调用getrlimit函数即可。下面是如何查询Linux中PID更大资源限制的过程。
步骤一:获取进程PID
在Linux系统中,有很多种方式可以获取进程的PID,其中最常用的是通过ps命令。ps命令可以显示当前正在运行的进程列表,以及它们的PID、状态、资源占用情况等信息。
打开终端,并输入以下命令:
ps aux | more
该命令会显示当前系统中所有正在运行的进程列表。输出结果中的第二列是PID。请注意,由于Linux是多用户和多进程的系统,因此在同一个系统中可能会有多个PID相同的进程。因此,在查询进程PID时,更好同时使用其他信息进行确认。
例如,假设我们要查询名为firefox的进程的PID。我们可以使用以下命令:
ps aux | grep firefox
该命令会输出所有包含“firefox”字符的进程,其中第二列是PID。
步骤二:查询PID限制
在获取了进程的PID之后,我们可以使用getrlimit函数来查询该进程的资源限制。getrlimit函数的之一个参数是资源类型,第二个参数是指向结构体的指针,该结构体包含了资源限制的当前值和更大值。
以下是示例代码:
#include
#include
#include
int mn(int argc, char **argv) { int pid = atoi(argv[1]); struct rlimit limit; if (getrlimit(RLIMIT_CPU, &limit) == -1) { perror(“getrlimit fled”); return -1; } printf(“PID %d, CPU rlimit %lld/%lld\n”, pid, limit.rlim_cur, limit.rlim_max); if (getrlimit(RLIMIT_AS, &limit) == -1) { perror(“getrlimit fled”); return -1; } printf(“PID %d, AS rlimit %lld/%lld\n”, pid, limit.rlim_cur, limit.rlim_max); if (getrlimit(RLIMIT_NOFILE, &limit) == -1) { perror(“getrlimit fled”); return -1; } printf(“PID %d, NOFILE rlimit %lld/%lld\n”, pid, limit.rlim_cur, limit.rlim_max); }
该代码会查询PID为参数的进程的三种资源限制,分别是CPU时间、地址空间和文件句柄数量。输出结果中,rlim_cur表示当前限制值,rlim_max表示更大限制值。
步骤三:解读限制值
在输出限制值时,我们需要了解它们的含义。
CPU时间:指进程占用CPU的时间。RLIMIT_CPU是CPU时间的软限制和硬限制。软限制允许进程运行一定时间后,会向其发送SIGXCPU信号,表明已超过软限制。硬限制则规定了更大值,超出时进程会被终止。
地址空间:指进程可以使用的虚拟内存大小。RLIMIT_AS是地址空间的软限制和硬限制。软限制允许进程使用一定的虚拟内存大小,超过后会向其发送SIGXFSZ信号。硬限制则规定了更大值,超出时会导致分配内存失败。
文件句柄:指进程可以打开的文件数量。RLIMIT_NOFILE是文件句柄数量的软限制和硬限制。软限制允许进程打开一定的文件数量,超过后会向其发送SIGXFSZ信号。硬限制则规定了更大值,超出时会导致打开文件失败。
在Linux系统中,每个进程都有自己的资源限制。为了查询进程的资源限制,我们需要知道其PID,并使用getrlimit函数进行查询。了解资源限制的含义,有助于调试和优化程序代码,避免资源不足导致的错误和崩溃。
相关问题拓展阅读:
一、使用memcache top脚本
memcache-top 是一个用 Perl 编写的命令行小工具,用来实时的获取 memcached 缓存服务器的详细信息,例如缓存命中键嫌率等。到官网下载脚本,放到用户目录,直接运行即可。
/home/nihaoya/memcache-top
INSTANCE USAGE HIT % CONN TIME EVICT/s READ/s WRITE/s
10.50.11.5:8.8% 69.6%.9ms 0..1K 36.2K
10.50.11.5:8.7% 69.6%.6ms 0..4K 28.1K
10.50.11.5:8.8% 69.4%.7ms 0..6K 32.1K
10.50.12.5:9.3% 81.5%.7ms 0..7K 204.0K
10.50.12.5:9.4% 69.3%.6ms 1..9K 63.5K
10.50.12.5:9.3% 69.4%.7ms 0..3K 194.4K
10.50.15.5:9.3% 71.8%.8ms 0..3K 59.2K
10.50.15.5:9.4% 69.3%.7ms 0..9K 35.4K
10.50.15.5:9.3% 84.5%.7ms 0..0K 187.2K
10.50.9.90:0.2% 76.3%.7ms 0.
10.50.9.90:9.2% 60.3%.7ms 0.
10.50.9.90:7.5% 16.9%.6ms 0.
AVERAGE: 72.4% 67.3%.8ms 0..2K 70.2K
TOTAL: 23.4GB.7K 9.2ms 4..4K 842.3K
二、使用telnet方式,只能查看某个节点的
# telnet 127.0.0.
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^>’.
stats
STAT pid//memcache服务器的进程ID
www.2cto.com
STAT uptime//服务器已经运行帆亮带的秒数
STAT time //服务器当前的unix时间戳
STAT version 1.4.9 //memcache版本
STAT libevent 1.4.9-stable //libevent版本
STAT pointer_size//当前操作系统的指针大小(态芦32位系统一般是32bit,64就是64位操作系统)
STAT rusage_user 3695.//进程的累计用户时间
STAT rusage_system 14751.//进程的累计系统时间
STAT curr_connections//服务器当前存储的items数量
STAT total_connections//从服务器启动以后存储的items总数量
STAT connection_structures//服务器分配的连接构造数
STAT reserved_fds//
STAT cmd_get//get命令(获取)总请求次数
STAT cmd_set//set命令(保存)总请求次数
www.2cto.com
STAT cmd_flush//flush命令请求次数
STAT cmd_touch 0 //touch命令请求次数
STAT get_hits//总命中次数
STAT get_misses//总未命中次数
STAT delete_misses 4 //delete命令未命中次数
STAT delete_hits//delete命令命中次数
STAT incr_misses 0 //incr命令未命中次数
STAT incr_hits 0 //incr命令命中次数
STAT decr_misses 0 //decr命令未命中次数
STAT decr_hits 0 //decr命令命中次数
STAT cas_misses 0 //cas命令未命中次数
STAT cas_hits//cas命令命中次数
STAT cas_badval 0 //使用擦拭次数
STAT touch_hits 0 //touch命令未命中次数
STAT touch_misses 0 //touch命令命中次数
STAT auth_cmds 0 //认证命令处理的次数
STAT auth_errors 0 //认证失败数目
STAT bytes_read//总读取字节数(请求字节数)
STAT bytes_written //总发送字节数(结果字节数)
STAT limit_maxbytes //分配给memcache的内存大小(字节)
STAT accepting_conns//服务器是否达到过更大连接(0/1)
STAT listen_disabled_num 0 //失效的监听数
STAT threads//当前线程数
STAT conn_yields//连接操作主动放弃数目
STAT hash_power_level//
STAT hash_bytes
STAT hash_is_expanding 0
STAT expired_unfetched
STAT evicted_unfetched 0
STAT bytes//当前存储占用的字节数
STAT curr_items//当前存储的数据总数
STAT total_items//启动以来存储的数据总数
STAT evictions 0 //为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
STAT reclaimed//已过期的数据条目来存储新数据的数目
END
退出:quit或者ctrl + > 然后在按q就行了。
安装telenet方法
1、yum install telnet-server 服务端
2、yum install telnet 客户端
3、vi /etc/xinetd.d/telnet
service telnet
{
flags= REUSE
socket_type = stream
wait= no
user= root
server= /usr/in/in.telnetd
log_on_failure+= USERID
disable= yes
}
将disable项由yes改成no。
4、/etc/init.d/xinetd restart
其他方式:
前项目中,linux下memcached的启动/结束的方式
默认情况下memcached安装到/usr/local/bin下。
进入安装目录,启动memcached:/usr/local/memcached/bin/memcached -d -cmu root
获取运行状态:echo stats | nc localhost 11211(可以查看出pid) 或使用ps -ef|grep memcached
停止memcached:kill -9 pid (-9表示强制杀死,pid 为进程的进程标识符)
-d 选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,这里是1024MB,默认是64MB
-u 是运行Memcache的用户,这里是root
-l 是监听的服务器IP地址,默认应该是本机
-p 是设置Memcache监听的端口,默认是11211,更好是1024以上的端口
-c 选项是更大运行的并发连接数,默认是1024,这里设置了10240,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件位置
-h 打印帮助信息
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息
ps -ef|grep memcached(命令说明)
grep:功能说明:查找文件里符合条件的字符串。
|:管道命令操作符
ps(process status):功能说明:报告程序状况。
连接到 memcached:
telnet ip 端口,如telnet 192.168.100.
stats查看状态,flush_all:清楚缓存
查看memcached状态的基本命令,通过这个命令可以看到如下信息:
STAT pid进程ID
STAT uptime 服务器运行秒数
STAT time 服务器当前unix时间戳
STAT version 1.4.服务器版本
STAT pointer_size操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.进程累计用户时间
STAT rusage_system 0.进程累计系统时间
STAT curr_connections当前打开连接数
STAT total_connections曾打开的连接总数
STAT connection_structures 服务器分配的连接结构数
STAT cmd_get 执行get命令总数
STAT cmd_set 执行set命令总数
STAT cmd_flush 指向flush_all命令总数
STAT get_hits get命中次数
STAT get_missesget未命中次数
STAT delete_missesdelete未命中次数
STAT delete_hitsdelete命中次数
STAT incr_missesincr未命中次数
STAT incr_hits incr命中次数
STAT decr_missesdecr未命中次数
STAT decr_hits decr命中次数
STAT cas_missescas未命中次数
STAT cas_hits cas命中次数
STAT cas_badval使用擦拭次数
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read读取字节总数
STAT bytes_written写入字节总数
STAT limit_maxbytes分配的内存数(字节)
STAT accepting_conns目前接受的链接数
STAT listen_disabled_num
STAT threads 线程数
STAT conn_yields 0
STAT bytes 存储item字节数
STAT curr_itemsitem个数
STAT total_itemsitem总数
STAT evictions 为获取空间删除item的总数
另外一个例子:
启动/结束
memcached -d -m 10 -u root -l 192.168.0.122 -pc 256 -P /tmp/memcached.pid
-d 选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB
-u 是运行Memcache的用户,这里是root
-l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.122
-p 是设置Memcache监听的端口,这里设置了12023,更好是1024以上的端口
-c 选项是更大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件
kill `cat /tmp/memcached.pid`
获取运行状态
echo stats | nc 192.168.1.
用脚本就可以搞定的! 当发现CPU占用率过高时,会自动重启相关程序。。
# 设置更大内存占用百分比
PID_MEM_MAX=”85″
# 设置更大系统负载
SYS_LOAD_MAX=”1″
# 设置需要监控的服务名称
NAME_LIST=”php5-cgi mysql”
for NAME in $NAME_LIST
do
# 初始化内存统计
PID_MEM_SUM=0
# 获取该程序总进程数
PID_NUM_SUM=`ps aux | grep $NAME | wc -l`
# 列出每个进程内存占用百分比
PID_MEM_LIST=`ps aux | grep $NAME | awk ‘{print $4}’`
# 计算所有进程总内存占用
for PID_MEM in $PID_MEM_LIST
do
PID_MEM_SUM=`echo $PID_MEM_SUM + $PID_MEM | bc`
done
# 获取最近一分钟系统负载
SYS_LOAD=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`
# 比较内存占用和系统负载是否超过阀值
MEM_VULE=`awk ‘BEGIN{print(‘”$PID_MEM_SUM”‘>=’”$PID_MEM_MAX”‘?”1″:”0″)}’`
LOAD_VULE=`awk ‘BEGIN{print(‘”$SYS_LOAD”‘>=’”$SYS_LOAD_MAX”‘?”1″:”0″)}’`
# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
核档 if || ;then
# 写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “killall $NAME” “(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)”>> /var/log/autoreboot.log
# 正坦仔常停止服务
/etc/init.d/$NAME stop
sleep 3
# 强制关闭
pkill $NAME
# 重启
/etc/init.d/$NAME start
#写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” “(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)” >> /var/log/autoreboot.log
else
echo “$NAME very health!(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)” > /dev/null
fi
done
以上代码保存为一个文件,例如:auto_reboot.sh
添加计划任务,设置每分钟检查一次(注意文件的位置要搞正确)
crontab -e
* * * * * /bin/bash/root/auto_reboot.sh
请确保您的Linux系统中已经安装了bc,否则会出现错误。查看是否安装了bc可以使用命令:
bc -v
如果没有安装,centos可以用 yum -y install bc 安装,然后执行命令:
sh /bin/bash/root/auto_reboot.sh
CentOS VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本:
# !/bin/sh
# usage: */2 * * * * root /root/checkload.sh
# VPS服务器根据CPU负载及内存占用自动重启脚本
# 设置最小剩余内存,一般至少要剩余50M可用(单位兆)
FREE_MEM_MIN=”50″
# 设置更大系统负载
SYS_LOAD_MAX=”3″
# 设置重启服务的最小剩余内存(单位兆)
RESTART_FREE_MEM_MIN=”500″
# 设置需要监控的服务名称
NAME_LIST=”httpd mysqld”
for NAME in $NAME_LIST
do
# 获得剩余内存(单位兆)
FREE_MEM=`free -m|grep Mem|awk ‘{print $4}’`
# 获得已用内存(单位兆)
# FREE_MEM=`free -m|grep Mem|awk ‘{print $3}’`
# 获取最近一分钟系统负载
SYS_LOAD=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`
# 比较内存占用和系统负载是否超过阀值
MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘=’”$SYS_LOAD_MAX”‘?”1″:”0″)}’`
# 测试结果
# LOAD_VULE=”1″
# echo $(date +”%y-%m-%d %H:%M:%S”) “DEBUG $NAME” “(FREE_MEM:$FREE_MEM|$MEM_VULE,LOAD:$SYS_LOAD|$LOAD_VULE)”>> /var/log/autoreboot_debug.log
# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
if || ;then
# 写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “killall $NAME” “(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)”>> /var/log/autoreboot.log
# 正常停止服务
service $NAME stop
sleep 3
# 强制关闭
skill $NAME
# 重启
sleep 10
for i in 1 2 3
do
FREE_MEM=`free -m|grep Mem|awk ‘{print $4}’`
MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘>=’”$RESTART_FREE_MEM_MIN”‘?”1″:”0″)}’`
if &&
then
service $NAME start
sleep 15
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
fi
done
# 写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” “(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)” >> /var/log/autoreboot.log
else
MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘>=’”$RESTART_FREE_MEM_MIN”‘?”1″:”0″)}’`
if &&
then
service $NAME start
sleep 15
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
else
echo “$NAME very health!(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)” > /dev/null
fi
fi
1、使用top命令查看当前进程swap占用
2、使用闷禅脚本文件
#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2023
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep “^/proc/”` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm –no-headers`
for SWAP in `grep Swap $DIR/aps 2>/dev/null| awk ‘{ print $2 }’`
do
let SUM=$SUM+$SWAP
done
echo “蚂悉尘PID=$PID – Swap used: $SUM – ($PROGNAME )”
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo “Overall swap used: $OVERALL”
linux 查看pid max的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux 查看pid max,如何查询Linux中PID更大资源限制?,linux 怎样 查看memcached是否安装成功,嵌入式Linux系统下 如何在CPU占用率过高的时候重启,linux下查看哪些进程在占用swap的信息别忘了在本站进行查找喔。
创新互联服务器托管拥有成都T3+级标准机房资源,具备完善的安防设施、三线及BGP网络接入带宽达10T,机柜接入千兆交换机,能够有效保证服务器托管业务安全、可靠、稳定、高效运行;创新互联专注于成都服务器托管租用十余年,得到成都等地区行业客户的一致认可。
文章标题:如何查询Linux中PID更大资源限制?(linux查看pidmax)
转载源于:http://www.shufengxianlan.com/qtweb/news33/511833.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联