如何查询Linux中PID更大资源限制? (linux 查看pid max)

在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函数进行查询。了解资源限制的含义,有助于调试和优化程序代码,避免资源不足导致的错误和崩溃。

相关问题拓展阅读:

linux 怎样 查看memcached是否安装成功

一、使用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.

嵌入式Linux系统下 如何在CPU占用率过高的时候重启

用脚本就可以搞定的! 当发现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

linux下查看哪些进程在占用swap

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的信息别忘了在本站进行查找喔。


数据运维技术 » 如何查询Linux中PID更大资源限制? (linux 查看pid max)