为什么Python微信小程序邮箱被占用不怎么占用CPU资源

29708人阅读
linux(2)
& & & & & 一个程序,完成它预设的功能,并不能说明它是一个优良的程序。好的程序,应该是对资源的合理利用,亦或是
用更少的资源(使用合理的算法),实现更多有效的产出。
& & & 影响程序的资源一般而言分为4个:CPU、内存、IO、网络。本文着重讲解一下在linux系统下,如何查看高CPU占用率的进程,线程。
2.python代码
& & &&为了模拟真实场景,我们用python程序模拟一个高CPU占用的情景,即开大量的线程,线程内部也使用无限循环(空跑),以下为python代码cpu.py:
#-*- coding:utf-8 -*-
import time, threading
#测试线程的个数
def loop():
print 'thread %s is running...' % threading.current_thread().name
while k & 500:
time.sleep(1)
def special():
print 'thread %s is running...' % threading.current_thread().name
while True:
#启动一些普通线程
for i in range(num):
t = threading.Thread(target=loop, name='normal-' + str(i))
t = threading.Thread(target=special, name='special')
t.start()& & & & 在linux系统中,使用 python cpu.py 运行该程序。
3.问题排查时使用的命令
& & 如何确定高cpu消耗的进程:
& & & &方法1 用top简单看一下:
& & & & 标红的部分,很明显能发现较高的cpu占用情况。
& & & & 方法2 &用ps -eo pid,pcpu | sort -n -k 2 (当然,可以tail一下)
& & & & &如何确定高cpu消耗的线程:
& & & & &方法1&用top -H
& & & & &标红的部分就是高cpu消耗的线程信息。
& & & & &方法2 用ps H -eo pid,tid,pcpu | sort -n -k 3
& & & & &假如我知道高cpu消耗的进程号是多少了,查看它的线程信息的方法为:
& & & & &方法 1: pstree -p pid
& & & & &&
& & & & &方法 2: 查看线程的详细信息:cat /proc/进程号/task/线程号/status
& & & & &&
& & & & &方法 3: 实时显示 top -H&-p pid
& & & & &&
& & & & &方法 4: htop,通过htop查看单个进程的线程,然后按&F2&来进入htop的设置菜单。选择“设置”栏下
& & & & & & 面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按&F10&退出设置。
& & & & & &&
& & & & & 方法 5: 查看该进程下所有的线程 &ps -efL | grep pid
& & & & 注意:
& & & & 如您发现本文档中有明显错误的地方,
& & & & 或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
& & & & 转载或使用本文档时,请作醒目说明。
& & & & 必要时请联系作者,否则将追究相应的法律责任。
& & & &&note:
& & & & If you find this document with any error ,
& & & & Or if you find any illegal citations , please contact me correct.
& & & & Reprint or use of this document,Please explain for striking.&
& & & & Please contact the author if necessary, or they will pursue the corresponding legal responsibility.
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:386114次
积分:1563
积分:1563
排名:千里之外
评论:16条
(1)(4)(8)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'用户名:rfyiamcool
文章数:156
评论数:1797
访问量:1709819
注册日期:
阅读量:1297
阅读量:3317
阅读量:580612
阅读量:462895
51CTO推荐博文
文章已经转到&& 个人博客里,欢迎浏览 !!!交流Python & Golang 可以加群&&&.&本文出自 “” 博客,谢绝转载!
了这篇文章
类别:┆阅读(0)┆评论(0)
17:39:28 18:32:40 22:44:59 08:32:52 08:46:30 09:09:19 09:10:00 09:39:02 19:45:50用户名:lilinji
文章数:107
评论数:12
访问量:121191
注册日期:
阅读量:1297
阅读量:3317
阅读量:580612
阅读量:462895
51CTO推荐博文
这回说说怎样通过 cgroups 来管理 cpu 资源。先说控制进程的 cpu 使用。在一个机器上运行多个可能消耗大量资源的程序时,我们不希望出现某个程序占据了所有的资源,导致其他程序无法正常运行,或者造成系统假死无法维护。这时候用 cgroups 就可以很好地控制进程的资源占用。这里单说 cpu 资源。cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间。这里的 cfs 是完全公平调度器的缩写。cpu.cfs_period_us 就是时间周期,默认为 100000,即百毫秒。cpu.cfs_quota_us 就是在这期间内可使用的 cpu 时间,默认 -1,即无限制。跑一个耗 cpu 的程序#&echo&'while&True:&pass'|python&&
[1]&1532top 一下可以看到,这进程占了 100% 的 cpu&&PID&USER&&&&&&PR&&NI&&VIRT&&RES&&SHR&S&%CPU&%MEM&&&&TIME+&&COMMAND
&77569&root&&&&&&20&&&0&&112m&&R&99.6&&0.7&&&0:30.42&python
...然后就来对这个进程做一下限制。先把 /foo 这个控制组的限制修改一下,然后把进程加入进去。echo&50000&&/sys/fs/cgroup/cpu/foo/cpu.cfs_quota_us
echo&77569&&/sys/fs/group/cpu/foo/tasks可见,修改设置只需要写入相应文件,将进程加入 cgroup 也只需将 pid 写入到其中的 tasks 文件即可。这里将 cpu.cfs_quota_us 设为 50000,相对于 cpu.cfs_period_us 的 100000 即 50%。再 top 一下看看效果。PID&USER&&&&&&PR&&NI&&VIRT&&RES&&SHR&S&%CPU&%MEM&&&&TIME+&&COMMAND
&77569&root&&&&&&20&&&0&&112m&&R&50.2&&0.7&&&5:00.31&python
...可以看到,进程的 cpu 占用已经被成功地限制到了 50% 。这里,测试的虚拟机只有一个核心。在多核情况下,看到的值会不一样。另外,cfs_quota_us 也是可以大于 cfs_period_us 的,这主要是对于多核情况。有 n 个核时,一个控制组中的进程自然最多就能用到 n 倍的 cpu 时间。另外的一组 cpu.rt_period_us、cpu.rt_runtime_us 对应的是实时进程的限制,平时可能不会有机会用到。在 cpu 子系统中,cpu.stat 就是用前面那种方法做的资源限制的统计了。nr_periods、nr_throttled 就是总共经过的周期,和其中受限制的周期。throttled_time 就是总共被控制组掐掉的 cpu 使用时间。还有个 cpu.shares, 它也是用来限制 cpu 使用的。但是与 cpu.cfs_quota_us、cpu.cfs_period_us 有挺大区别。cpu.shares 不是限制进程能使用的绝对的 cpu 时间,而是控制各个组之间的配额。比如/cpu/cpu.shares&:&1024
/cpu/foo/cpu.shares&:&2048那么当两个组中的进程都满负荷运行时,/foo 中的进程所能占用的 cpu 就是 / 中的进程的两倍。如果再建一个 /foo/bar 的 cpu.shares 也是 1024,且也有满负荷运行的进程,那 /、/foo、/foo/bar 的 cpu 占用比就是 1:2:1 。前面说的是各自都跑满的情况。如果其他控制组中的进程闲着,那某一个组的进程完全可以用满全部 cpu。可见通常情况下,这种方式在保证公平的情况下能更充分利用资源。此外,还可以限定进程可以使用哪些 cpu 核心。cpuset 子系统就是处理进程可以使用的 cpu 核心和内存节点,以及其他一些相关配置。这部分的很多配置都和 NUMA 有关。其中 cpuset.cpus、cpuset.mems 就是用来限制进程可以使用的 cpu 核心和内存节点的。这两个参数中 cpu 核心、内存节点都用 id 表示,之间用 “,” 分隔。比如 0,1,2 。也可以用 “-” 表示范围,如 0-3 。两者可以结合起来用。如“0-2,6,7”。在添加进程前,cpuset.cpus、cpuset.mems 必须同时设置,而且必须是兼容的,否则会出错。例如#&echo&0&&/sys/fs/cgroup/cpuset/foo/cpuset.cpus
#&echo&0&&/sys/fs/cgroup/cpuset/foo/cpuset.mems这样, /foo 中的进程只能使用 cpu0 和内存节点0。用#&cat&/proc/&pid&/status|grep&'_allowed_list'可以验证效果。cgroups 除了用来限制资源使用外,还有资源统计的功能。做云计算的计费就可以用到它。有一个 cpuacct 子系统专门用来做 cpu 资源统计。cpuacct.stat 统计了该控制组中进程用户态和内核态的 cpu 使用量,单位是 USER_HZ,也就是 jiffies、cpu 滴答数。每秒的滴答数可以用&getconf CLK_TCK来获取,通常是 100。将看到的值除以这个值就可以换算成秒。cpuacct.usage 和 cpuacct.usage_percpu 是该控制组中进程消耗的 cpu 时间,单位是纳秒。后者是分 cpu 统计的。本文出自 “” 博客,转载请与作者联系!
了这篇文章
类别:┆阅读(0)┆评论(0)转载:10种检测Python程序运行时间、CPU和内存占用的方法_ASP.NET技巧_动态网站制作指南
转载:10种检测Python程序运行时间、CPU和内存占用的方法
来源:人气:121
原文网址:http://www.jb51.net/article/63244.htm
优质网站模板求教 Python 怎么获取cpu使用率,内存使用率【python吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:152,408贴子:
求教 Python 怎么获取cpu使用率,内存使用率收藏
求教 Python 怎么获取cpu使用率,内存使用率
python_总监级名师全程面授,项目实战案例式教学,企业需求无缝对接,助你无忧就业!python,报名即送树莓设备,0基础23周快速实现高薪就业,名额有限,欲报从速.点击抢座
如何用wmi获取
from ctypes import * class MEMORYSTATUS(Structure):
_fields_ = [('dwLength', c_int), ('dwMemoryLoad', c_int), ('dwTotalPhys', c_int), ('dwAvailPhys', c_int), ('dwTotalPageFile', c_int),
('dwAvailPageFile', c_int), ('dwTotalVirtual', c_int), ('dwAvailVirtual', c_int)] MEMORYSTATUS = MEMORYSTATUS() windll.kernel32.GlobalMemoryStatus(byref(MEMORYSTATUS)) print 'To use memory percentage:', MEMORYSTATUS.dwMemoryLoad#使用物理内存的百分比 print 'Physical memory total:', MEMORYSTATUS.dwTotalPhys / (1024 * 1024)#物理内存总数 print 'Physical memory available:', MEMORYSTATUS.dwAvailPhys / (1024 * 1024) #可用内存总数这个事内存的,CPU的我找不到。。
from ctypes import * class MEMORYSTATUS(Structure):
_fields_ = [('dwLength', c_int), ('dwMemoryLoad', c_int), ('dwTotalPhys', c_int), ('dwAvailPhys', c_int), ('dwTotalPageFile', c_int),
('dwAvailPageFile', c_int), ('dwTotalVirtual', c_int), ('dwAvailVirtual', c_int)] MEMORYSTATUS = MEMORYSTATUS() windll.kernel32.GlobalMemoryStatus(byref(MEMORYSTATUS)) print 'To use memory percentage:', MEMORYSTATUS.dwMemoryLoad#使用物理内存的百分比 print 'Physical memory total:', MEMORYSTATUS.dwTotalPhys / (1024 * 1024)#物理内存总数 print 'Physical memory available:', MEMORYSTATUS.dwAvailPhys / (1024 * 1024) #可用内存总数 。。。。。。
要排下版啊
登录百度帐号推荐应用

我要回帖

更多关于 关闭占用端口的程序 的文章

 

随机推荐