绵阳网站建设费用,linux wordpress 中文,如何用dw修改wordpress的首页,wordpress插件数量一、背景
2021年做可信计算时#xff0c;由于甲方给的CPU利用率不能不能超过20%#xff1b; 目的#xff1a;我们的程序部署甲方服务器上不能阻碍其甲方服务的正常运行 我们的程序在CPU超过20%时#xff0c;可以休眠几秒后继续运行 此时需要检测控制服务器的CPU资源使用信…一、背景
2021年做可信计算时由于甲方给的CPU利用率不能不能超过20% 目的我们的程序部署甲方服务器上不能阻碍其甲方服务的正常运行 我们的程序在CPU超过20%时可以休眠几秒后继续运行 此时需要检测控制服务器的CPU资源使用信息用于做判断程序是否休眠
resource 模块用于测量和控制程序使用的系统资源的基本机制
二、resource 基本用法
2.1 资源限制
resource.RLIM_INFINITY 无限资源的限制resource.getrlimit(resource) 当前资源软硬限制的元组(soft, hard)resource.setrlimit(resource, limits) 设置新的资源消耗限制 limits 两个整数的元组resource.prlimit(pid, resource[, limits])setrlimit()将和结合getrlimit()在一个函数中支持获取和设置任意进程的资源限制
如果 pid为0则调用适用于当前进程
resource和limits与中的含义相同setrlimit()limits可选
当没有给出限制时该函数返回进程pid的资源限制
当给定限制时设置进程的资源限制并返回以前的资源限制import resource# 进程可用存储区大小
soft, hard resource.getrlimit(resource.RLIMIT_AS)
# 进程最大处理器时间
soft, hard resource.getrlimit(resource.RLIMIT_CPU)# 设置cpu最大处理时间
resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
# 设置进程内存限制程序运行到没有多余内存时会抛出 MemoryError 异常
resource.setrlimit(resource.RLIMIT_AS, (size, hard))resource解释说明resource.RLIMIT_AS进程可用存储区大小resource.RLIMIT_CPU进程最大处理器时间超出限制SIGXCPU则会向进程发送信号resource.RLIMIT_FSIZE进程可创建文件的最大值resource.RLIMIT_COREcore文件最大字节resource.RLIMIT_DATA进程堆的最大大小数据段最大长度resource.RLIMIT_MEMLOCK可锁定在内存中的最大地址空间使用mlock能否在存储器中锁定最长字节数resource.RLIMIT_NOFILE当前进程的最大打开文件数resource.RLIMIT_NPROC当前进程可创建的最大进程数resource.RLIMIT_RSS供给进程的最大驻存集的字节长度resource.RLIMIT_STACK当前进程调用栈的最大长度resource.RLIMIT_OFILE-resource.RLIMIT_VMEM进程占用的最大映射内存区域resource.RLIMIT_MSGQUEUE分配给POSIX 消息队列的字节数resource.RLIMIT_NICE进程 nice 级别的上限resource.RLIMIT_RTPRIO实时优先级的上限resource.RLIMIT_RTTIME实时优先级的上限resource.RLIMIT_SIGPENDING进程可能排队的信号数resource.RLIMIT_SBSIZE用户使用的套接字缓冲区的最大大小resource.RLIMIT_SWAP该用户 ID 的所有进程保留或使用的交换空间的最大大小resource.RLIMIT_NPTS用户标识创建的伪终端的最大数量resource.RLIMIT_KQUEUES用户 ID 创建的最大 kqueue 数
2.2 资源使用
resource.getpagesize() 获取页面大小: 返回系统页面中的字节数resource.getrusage(who) 由who参数指定的当前进程或其子进程消耗的资源import resource# 资源使用状况请求调用进程消耗的资源进程中所有线程使用的资源总和
sor resource.getrusage(resource.RUSAGE_SELF)# 已终止和等待的调用进程的子进程消耗的请求资源
sor resource.getrusage(resource.RUSAGE_CHILDREN)# 当前进程和子进程消耗的资源 并非在所有系统上都可用
sor resource.getrusage(resource.RUSAGE_BOTH)# 当前线程消耗的资源 可能并非在所有系统上都可用
sor resource.getrusage(resource.RUSAGE_THREAD)# 用户模式下的时间(其它参数如下)
print(sor.ru_utime)序号函数描述0ru_utime用户模式下的时间1ru_stime系统模式下的时间2ru_maxrss最大驻留集大小3ru_ixrss共享内存大小4ru_idrss非共享堆栈大小5ru_isrss非共享堆栈大小6ru_minflt不需要 I/O 的页面错误7ru_majflt需要 I/O 的页面错误8ru_nswap换出数量9ru_inblock块输入操作10ru_oublock块输出操作11ru_msgsnd已发送消息12ru_msgrcv收到的消息13ru_nsignals收到的信号14ru_nvcsw自愿上下文切换15ru_nivcsw非自愿上下文切换
官方文档
三、限制进程的CPU处理时间和内存使用量
import signal
import resource
import os# 限制 CPU 时间
def time_exceeded(signo, frame):# 超时时打印提示信息并引发 SystemExit 异常以终止脚本print(CPU exceeded...)raise SystemExit(1)def set_max_runtime(seconds):# 获取当前 CPU 时间的软限制和硬限制soft, hard resource.getrlimit(resource.RLIMIT_CPU)# 设置软限制为指定的时间硬限制不变resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))# 安装一个信号处理程序来处理超时信号 SIGXCPUsignal.signal(signal.SIGXCPU, time_exceeded)# 限制内存使用量
def set_max_memory(size):# 获取当前内存使用量的软限制和硬限制soft, hard resource.getrlimit(resource.RLIMIT_AS)# 设置软限制为指定的大小硬限制不变resource.setrlimit(resource.RLIMIT_AS, (size, hard))set_max_runtime 函数通过调用 resource 模块中的 getrlimit 和 setrlimit 函数来限制 Python 进程的 CPU 时间。函数首先调用 getrlimit 函数获取当前 CPU 时间的软限制和硬限制然后将软限制设置为指定的时间将硬限制保持不变。最后该函数调用 signal 模块中的 signal 函数安装一个处理超时信号 SIGXCPU 的信号处理程序该处理程序在超时时打印一条提示信息并引发 SystemExit 异常以终止脚本。 set_max_memory 函数同样使用 getrlimit 和 setrlimit 函数来限制 Python 进程的内存使用量。该函数首先调用 getrlimit 函数获取当前内存使用量的软限制和硬限制然后将软限制设置为指定的大小将硬限制保持不变。