我手机上用WiFi、是我卖掉儿子为买手机的电脑上WiFi,我一直在用,怎么一吓子不见了?我要怎样才能找回!

Linux下查看进程和线程的方法
作者:佚名
字体:[ ] 来源:互联网 时间:01-08 20:09:37
这篇文章主要介绍了Linux下查看进程和线程的方法,需要的朋友可以参考下
在Linux中查看线程数的三种方法
1、top -H手册中说:-H : Threads toggle加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。2、ps xH手册中说:H Show threads as if they were processes这样可以查看所有存在的线程。3、ps -mp &PID&手册中说:m Show threads after processes这样可以查看一个进程起的线程数。
1. top 命令
top命令查看系统的资源状况
  load average表示在过去的一段时间内有多少个进程企图独占CPU
  zombie 进程 :不是异常情况。一个进程从创建到结束在最后那一段时间遍是僵尸。留在内存中等待父进程取的东西便是僵尸。任何程序都有僵尸状态,它占用一点内存资源,仅仅是表象而已不必害怕。如果程序有问题有机会遇见,解决大批量僵尸简单有效的办法是重起。kill是无任何效果的stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的。
  cpu states:
  nice:让出百分比irq:中断处理占用
  idle:空间占用百分比 iowait:输入输出等待(如果它很大说明外存有瓶颈,需要升级硬盘(SCSI))
  Mem:内存情况
  设计思想:把资源省下来不用便是浪费,如添加内存后free值会不变,buff值会增大。 判断物理内存够不够,看交换分区的使用状态。
  交互命令:
  [Space]立即刷新显示
  [h]显示帮助屏幕
  [k] 杀死某进程。你会被提示输入进程 ID 以及要发送给它的信号。 一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  [n] 改变显示的进程数量。你会被提示输入数量。
  [u] 按用户排序。
  [M] 按内存用量排序。
  [o][O] 改变显示项目的顺序。
  [P] 根据CPU使用百分比大小进行排序。
  [T] 根据时间/累计时间进行排序。
  [Ctrl+L] 擦除并且重写屏幕。
  [q] 退出程序。
  [r] 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  [S] 切换到累计模式。
  [s] 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
  缩写含义:
  PID每个进程的ID
  USER进程所有者的用户名
  PRI每个进程的优先级别
  NI每个优先级的值
  SIZE 进程的代码大小加上数据大小再加上堆栈空间大小的总数,单位是KB RSS 进程占用的物理内存的总数量,单位是KB
  SHARE进程使用共享内存的数量
  STAT 进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态
  %CPU进程自最近一次刷新以来所占用的CPU时间和总时间的百分比
  %MEM进程占用的物理内存占总内存的百分比
  TIME进程自启动以来所占用的总CPU时间
  CPU CPU标识
  COMMAND进程的命令名称
ps查看当前用户的活动进程,如果加上参数可以显示更多的信息,如-a,显示所有用户的进程
  ps ax :tty值为&?&是守护进程,叫deamon 无终端,大多系统服务是此进程,内核态进程是看不到的
&&&&& ps axf :看进程树,以树形方式现实进程列表敲 ,init是1号进程,系统所有进程都是它派生的,杀不掉
&&&&& ps axm :会把线程列出来。在linux下进程和线程是统一的,是轻量级进程的两种方式。
  ps axu :显示进程的详细状态。
  vsz:说此进程一共占用了多大物理内存。
  rss:请求常驻内存多少
其实linux没有线程,都是用进程模仿的
1. ps -ef f用树形显示进程和线程,比如说我想找到proftp现在有多少个进程/线程,可以用
$ ps -ef f | grep proftpdnobody
Dec23 ? S 0:00 proftpd:& (accepting& connections)& jack
0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv:& IDLEjack
0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv:& IDLE
这样就可以看到proftpd这个进程下面挂了两个线程。在Linux下面好像因为没有真正的线程,是用进程模拟的,有一个是辅助线程,所以真正程序开的线程应该只有一个。
2. pstree -c也可以达到相同的效果$ pstree -c | grep proftpd|-proftpd-+-proftpd| `-proftpd
3. cat /proc/${pid}/status 可以查看大致的情况
4.& pstack
有些系统可以用这个东东,可以查看所有线程的堆栈
如何查看进程中各线程的内存占用情况?
用ps aux只能查看到进程,如果进程里面使用了pthread编程,用什么命令才能查询到进程里的线程资源占用?ps aux | grep不就是了
大家感兴趣的内容
12345678910
最近更新的内容Linux下Java线程状态分析 - IT老兵 - ITeye技术网站
博客分类:
在Linux上输入top
进入top后按【shift】+【H】组合键,按线程方式查看线程ID、CPU消耗状况等
通过这种方式获取耗CPU的线程后查看ThreadDump文件做进一步分析
获取ThreadDump的方法:
jstack -l pid &jstack.log
"Attach Listener" daemon prio=10 tid=0x0000 nid=0x76e6 waiting on condition [0x0000]
线程名称: Attach Listener
* 线程类型:daemon
* 优先级:10,默认是5
* jvm线程id:jvm内部线程的唯一标识, 0x0000
* 对应系统线程id:和top命令查看的pid对应,不过一个是10进制,一个是16进制。0x76e6
* 线程状态:waiting on condition
* 起始栈地址: [0x0000]
线程状态详解
Runnable
_The thread is either running or ready to run when it gets its CPU turn.
Wait on condition
_The thread is either sleeping or waiting to be notified by another thread._
Waiting for Monitor Entry and in Object.wait()
_The thread is waiting to get the lock for an object (some other thread may be holding the lock). This happens if two or more threads try to execute synchronized code. Note that the lock is always for an object and not for individual methods._
浏览: 181303 次
来自: 北京
求源码,这是伪代码
对RPC服务不了解 这个是否也是个c-s对于某些需要s-s的需 ...
&div class=&quote_title ...
没原码啊,,,
Leipaopao 写道想问一下楼主有没有使用过netty5来 ... 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
实验报告 Linux下的多进程编程
下载积分:30
内容提示:实验报告 Linux下的多进程编程
文档格式:PDF|
浏览次数:156|
上传日期: 23:59:17|
文档星级:
该用户还上传了这些文档
实验报告 Linux下的多进程编程
官方公共微信Linux获取线程id的方法学习_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Linux获取线程id的方法学习
来源:Linux社区&
作者:boyxulin1986
最近一直在想:如何确认两段代码是不是在同一个线程中执行的呢?
通过查看资料,发现一种比较简单的方法就是在代码中使用printf将当前线程的id打印出来。而这也分成两种情况:1. 如果是pthread,则使用,#include &pthread.h&
pthread_t pthread_self(void);
2. 如果不是pthread,即是由内核创建的线程,则使用,#include &sys/types.h&
pid_t gettid(void);
获取线程所在的进程的id,方法如下:#include &sys/types.h&#include &unistd.h&
pid_t getpid(void);pid_t getppid(void);
所以,我们在代码中使用如下的语句打印:printf("\ntid=%lu, pid=%lu\n", gettid(), getpid());这样就能获取当前代码所在的线程和进程了。
根据打印出来的进程的pid,获取进程名的方法是:ls -lh /proc/pid/exelrwxrwxrwx 1 root root 0 Jan& 1 20:48 /proc/pid/exe -& ...sh-3.2#
查看thread id的方法有:1. sh-3.2# ps -efL | grep process,ps命令指定-L命令选项可以用来查看进程下所包含的所有线程。
2. sh-3.2# ls -l /proc/pid/task/查看进程下当前有哪些task,这些task指的就是线程。
测试所遇到的实际状况:1. 运行后发现两个线程虽然是同属于一个进程,但是使用如上两种方法查看线程时只能看到其中一个线程。猜测是另一个线程已经退出了?有空时可以再确认一下。
2. 调用gettid()会出现编译错误,其原因是gettid是一个系统调用,在glibc中没有对应的库函数。用户如果有需要,可以直接调用gettid所对应的系统调用。
推荐阅读:
Linux 多线程同步(信号量)
Linux多线程──主线程和子线程分别循环一定次数
Linux多线程──3个子线程轮流运行
Linux多线程──生产者消费者
Linux多线程──读者写者问题
Linux基础编程 多线程中的互斥锁 pthread_mutex_lock
Linux基础编程 多线程同步 pthread_cond_signal
相关资讯 & & &
& (01月23日)
& (06/15/:42)
& (04/04/:08)
& (01月18日)
& (04/12/:56)
& (01/08/:40)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 - DoubleLi - 博客园
可以用下面的命令将 cpu 占用率高的线程找出来:&ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。
直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3.查看哪个进程线程占用cpu过高; top / ps -aux, 获得进程号确定哪个线程占用cpu过高,进入进程号的目录:/proc/pid/task,&执行:grep SleepAVG& **/status& | sort -k2,2 | head,& 确定cpu占用较高的线程号。使用kill -3 pid 会打印线程堆栈的情况
在 Linux 下 top 工具可以显示 cpu 的平均利用率(user,nice,system,idle,iowait,irq,softirq,etc.),可以显示每个 cpu 的利用率。但是无法显示每个线程的 cpu 利用率情况,这时就可能出现这种情况,总的 cpu 利用率中 user 或 system 很高,但是用进程的 cpu 占用率进行排序时,没有进程的 user 或 system 与之对应。
proc文件系统
/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
/proc目录中有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,它们是读取进程信息的接口。此外,在Linux2.6.0-test6以上的版本中/proc/pid目录中有一个task目录,/proc/pid/task目录中也有一些以该进程所拥有的线程的线程号命名的目录/proc/pid/task/tid,它们是读取线程信息的接口。
/proc/cpuinfo文件
&&&&&&&& 该文件中存放了有关 cpu的相关信息(型号,缓存大小等)。
[zhengangen@buick ~]$ cat /proc/cpuinfo
processor&&&&&& : 0
vendor_id&&&&&& : GenuineIntel
cpu family&&&&& : 15
model&&&&&&&&&& : 4
model name&&&&& : Intel(R)Xeon(TM) CPU 3.00GHz
stepping&&&&&&& : 10
cpu MHz&&&&&&&& :
cache size&&&&& : 2048 KB
physical id&&&& : 0
siblings&&&&&&& : 2
core id&&&&&&&& : 0
cpu cores&&&&&& : 1
fdiv_bug&&&&&&& : no
hlt_bug&&&&&&&& : no
f00f_bug&&&&&&& : no
coma_bug&&&&&&& : no
fpu&&&&&&&&&&&& : yes
fpu_exception&& : yes
cpuid level&&&& : 5
wp&&&&&&&&&&&&& : yes
flags&&&&&&&&&& : fpu vme de psetsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsrsse sse2 ss ht tm pbe lm pni monitor ds_cpl cid xtpr
bogomips&&&&&&& : 6004.52
说明:以下只解释对我们计算Cpu使用率有用的相关参数。
&&&&&&&& 参数&&&&&&&&&&&&&&&&&&&&&&&&&&& 解释
processor (0)&&&&&&&&&&&&&&&&&&&&&& cpu的一个物理标识
结论1:可以通过该文件根据processor出现的次数统计cpu的逻辑个数(包括多核、超线程)。
/proc/stat文件
&&&&&&&& 该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致,以下通过实例来说明数据该文件中各字段的含义。
实例数据:2.6.24-24版本上的
fjzag@fjzag-desktop:~$cat /proc/stat
581 895 0 0
1 0 5 0 3 0 0 0
0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt1434984
processes8113
procs_running1
procs_blocked0
第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:
参数&& &&&&&& 解析(单位:jiffies)
(jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)
user&(38082)&&& 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
nice&(627)&&&&& 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system&(27594)& 从系统启动开始累计到当前时刻,处于核心态的运行时间
idle&(893908)&& 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait&(12256) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)
irq&(581)&& &&&&&&& 从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)
softirq&(895)& &&& 从系统启动开始累计到当前时刻,软中断时间(since2.6.0-test4)stealstolen(0) &&&&&&&& &&&&&&&& which is the time spent in otheroperating systems when running in a virtualized environment(since 2.6.11)
guest(0)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& whichis the time spent running a virtual&CPU& for& guest operating systems under the control ofthe Linux kernel(since 2.6.24)
结论2:总的cpu时间totalCpuTime = user + nice+ system + idle + iowait + irq + softirq + stealstolen&+ &guest
/proc/&pid&/stat文件&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计
到当前时刻。以下通过实例数据来说明该文件中各字段的含义。
[zhengangen@buick ~]# cat/proc/6873/stat
6873 (a.out) R 23
0 0 00 0 0 17 0 0 0
说明:以下只解释对我们计算Cpu使用率有用相关参数
参数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& 解释
pid=6873 &&&&&&&&&&&&&&&&&&&&&&&&&& 进程号
utime=1587 &&&&&&&&&&&&&&&&&&&&& 该任务在用户态运行的时间,单位为jiffies
stime=41958&&&&&&&&&&&&&&&&&&&&& 该任务在核心态运行的时间,单位为jiffies
cutime=0 &&&&&&&&&&&&&&&&&&&&&&&&&& 所有已死线程在用户态运行的时间,单位为jiffies
cstime=0 &&&&&&&&&&&&&&&&&&&&&&&&&& 所有已死在核心态运行的时间,单位为jiffies
结论3:进程的总Cpu时间processCpuTime = utime +stime + cutime + cstime,该值包括其所有线程的cpu时间。
/proc/&pid&/task/&tid&/stat文件
该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/&pid&/stat文件。
&&&&&&&& 注意,该文件中的tid字段表示的不再是进程号,而是linux中的轻量级进程(lwp),即我们通常所说的线程。
结论4:线程Cpu时间threadCpuTime = utime +stime
系统中有关进程cpu使用率的常用命令
通过ps命令可以查看系统中相关进程的Cpu使用率的信息。以下在linux man文档中对ps命令输出中有关cpu使用率的解释:
CPU usage is currentlyexpressed as the percentage of time spent running during the entire lifetime ofa process. This is not ideal, and it does not conform to the standards that psotherwise conforms to. CPU usage is unlikely to add up to exactly 100%.
%cpu&& cpu utilization of the process in"##.#" format. It is the CPU time used&&&&&&&&&&&&&&&&&&&&&&&&&& divided by the timethe process has been running (cputime/realtime ratio),&&&&&&&&&&&&&&&&&&&&&&&&&& expressed as apercentage. It will not add up to 100% unless you are lucky.
结论5:ps命令算出来的cpu使用率相对于进程启动时的平均值,随着进程运行时间的增大,该值会趋向于平缓。
通过top命令可以查看系统中相关进程的实时信息(cpu使用率等)。以下是man文档中对top命令输出中有关进程cpu使用率的解释。
#C& --&Last used CPU (SMP) &&&&&&&&&&&&&&&&& Anumber representing the last used processor. In a true& SMP&environment& this& will&likely change& frequently& since&the& kernel intentionally usesweak affinity.& Also, the very act ofrunning top may break this weak affinity and cause more processes to& change&CPUs& more& often (because of the extra demand for cputime).
%CPU& --& CPUusage&&&&&&&&& &&&&&&&& The& task&s share ofthe elapsed CPU time since the last screen update, expressed as a percent-ageof total CPU time.& In a true SMP environment, if &Irix mode is Off, top will operate in Solaris modewhere a task&s cpu usage will be divided by the total number of CPUs.
结论6:某一个线程在其运行期间其所使用的cpu可能会发生变化。
结论7:在多核的情况下top命令输出的cpu使用率实质是按cpu个数*100%计算的。
单核情况下Cpu使用率的计算
通过读取/proc/stat 、/proc/&pid&/stat、/proc/&pid&/task/&tid&/stat以及/proc/cpuinfo这几个文件获取总的Cpu时间、进程的Cpu时间、线程的Cpu时间以及Cpu的个数的信息,然后通过一定的算法进行计算(采样两个足够短的时间间隔的Cpu快照与进程快照来计算进程的Cpu使用率)。
总的Cpu使用率计算
计算方法:
1、& 采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:
(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;
2、& 计算总的Cpu时间片totalCpuTime
a)&&&&&&&&把第一次的所有cpu使用情况求和,得到s1;
b)&&&&&&&&把第二次的所有cpu使用情况求和,得到s2;
c)&&&&&&&&s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;
3、计算空闲时间idle
idle对应第四列的数据,用第二次的第四列- 第一次的第四列即可
idle=第二次的第四列- 第一次的第四列
6、计算cpu使用率
pcpu =100* (total-idle)/total
某一进程Cpu使用率的计算
计算方法:&&
1.&&&&&&&&&&&&&&采样两个足够短的时间间隔的cpu快照与进程快照,
a)&&&&&&&&每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;
b)&&&&&&&&每一个进程快照均为&(utime、stime、cutime、cstime)的4元组;
2.&&&&&&&&&&&&&&分别根据结论2、结论3计算出两个时刻的总的cpu时间与进程的cpu时间,分别记作:totalCpuTime1、totalCpuTime2、processCpuTime1、processCpuTime2
3.&&&&&&&&&&&&&&计算该进程的cpu使用率pcpu = 100*(processCpuTime2 & processCpuTime1) / (totalCpuTime2 & totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);
实验一:&监控一空循环的进程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
PID &&&USER&&&&& PR &&NI& &VIRT& &RES& &SHR &&S &%CPU&%MEM &TIME+& COMMAND&
7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 99& 2.2&& 1:00.74 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 99& 2.2&& 1:03.71 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 99& 2.2&& 1:06.67 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 99& 2.2&& 1:09.63 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 98& 2.2&& 1:12.59 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 99& 2.2&& 1:15.55 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S& 100& 2.2&& 1:18.55 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S& 100& 2.2&& 1:21.54 java&&&&&&&&&&&&&&
&7639 fjzag& &&&20&& 0& 206m& 10m 7136 S&& 99& 2.2&& 1:24.52 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&& 0& 206m& 10m 7136 S&& 98& 2.2&& 1:27.46 java
实验二:&监控jconsole进程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
PID &&USER&&&&& PR &&NI& VIRT& &RES& &SHR &S &%CPU&%MEM &TIME+& COMMAND&
7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&& 10 14.4&& 0:18.70 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&& 12 14.4&& 0:19.07 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&& 11 14.4&& 0:19.39 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&&& 7 14.4&& 0:19.61 jconsole&&&&&&&&&&
&7753 fjzag& &&&20&& 0& 252m& 72m& 22m S&&& 7 14.4&& 0:19.83 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&&& 5 14.4&& 0:19.97 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&& 14 14.4&& 0:20.38 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&& 10 14.4&& 0:20.68 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&& 0& 252m& 72m& 22m S&&& 9 14.5&& 0:20.96 jconsole
某一线程Cpu使用率的计算
计算方法:&&
1.&&&&&&&&&&&&&&采样两个足够短的时间隔的cpu快照与线程快照,
a)&&&&&&&&每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstealon、guest)的9元组;
b)&&&&&&&&每一个线程快照均为&(utime、stime)的2元组;
2.&&&&&&&&&&&&&&分别根据结论2、结论4计算出两个时刻的总的cpu时间与线程的cpu时间,分别记作:totalCpuTime1、totalCpuTime2、threadCpuTime1、threadCpuTime2
3.&&&&&&&&&&&&&&计算该线程的cpu使用率pcpu = 100*( threadCpuTime2& threadCpuTime1) / (totalCpuTime2& totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);
实验一:&监控一空循环的线程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
PID &&&USER&&&&& PR &&NI& &VIRT& &RES& &SHR &&S &%CPU&%MEM &TIME+& COMMAND&
7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 97& 2.2&& 7:22.94 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 97& 2.2&& 7:25.86 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 97& 2.2&& 7:28.76 java&&&&&&&&&&&&&&
&7649 fjzag& &&&20&& 0& 206m& 10m 7136 R&& 99& 2.2&& 7:31.72 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 98& 2.2&& 7:34.65 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 96& 2.2&& 7:37.53 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 98& 2.2&& 7:40.47 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 96& 2.2&& 7:43.34 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&& 0& 206m& 10m 7136 R&& 97& 2.2&& 7:46.25 java
实验二:&监控jconsole程序某一线程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
&PID &&&USER&&&&& PR &&NI& &VIRT& &RES& SHR &S &%CPU&%MEM &TIME+& COMMAND&
7755 fjzag&&&& 20&& 0& 251m& 72m& 22m S&&& 1 14.4&& 0:11.92 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&& 0& 251m& 72m& 22m S&&& 7 14.4&& 0:12.12 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&& 0& 251m& 72m& 22m S&&& 2 14.4&& 0:12.18 jconsole&&&&&&&&&&
&7755 fjzag&& &&20&& 0& 251m& 72m& 22m S&&& 0 14.4&& 0:12.18 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&& 0& 251m& 72m& 22m S&&& 1 14.4&& 0:12.20 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&& 0& 251m& 72m& 22m S&&& 1 14.4&& 0:12.24 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&& 0& 251m& 72m& 22m S&&& 1 14.4&& 0:12.28 jconsole
多核情况下cpu使用率的计算&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
以下通过实验数据来说明多核情况下某一进程cpu使用率是按cpu个数*100%计算的.
在双核的情况下作的一组实验,第一组数据是通过ps& -eLo pid,lwp,pcpu | grep 9140命令查看进程号为9140的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为9140进程的cpu使用率。
pid&& lwp& %cpu
&&0.0&&&0.0&&&0.0&&&0.0&&&0.0&&&0.0&&&0.0&&&0.0&&&0.1&&96.6&&&&&&&&&&&&&&&&&&&&&&&& 该线程是一个空循环&&95.9&&&&&&&&&&&&&&&&&&&&&&&& 该线程是一个空循环
以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。
pid&& %cpu
在单核的情况下作的一组实验,第一组数据是通过ps& -eLo pid,lwp,pcpu | grep 6137命令查看进程号为6137的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为6137进程的cpu使用率。
&pid&&& lwp&&%cpu
&.9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 空循环线程
&.9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 空循环线程
以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。
主要问题:
1.&&&&&&不同内核版本/proc/stat文件格式不大一致。/proc/stat文件中第一行为总的cpu使用情况。
各个版本都有的4个字段: user、nice、system、idle
2.5.41版本新增字段:iowait
2.6.0-test4新增字段:irq、softirq
2.6.11新增字段:stealstolen: &&&&&&&&&&&&&&&&&& which is thetime spent in other operating
systems whenrunning in a virtualized environment
2.6.24新增字段:guest:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& whichis the time spent running a virtual&CPU& for& guest operating systems under the control ofthe Linux kernel
2./proc/pid/task目录是Linux 2.6.0-test6之后才有的功能。
3.关于出现cpu使用率为负的情况,目前想到的解决方案是如果出现负值,连续采样计算cpu使用率直到为非负。
4.有些线程生命周期较短,可能在我们采样期间就已经死掉了.
服务器环境:redhat linux 5.5 , nginx ,& phpfastcgi
在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢,我所遇到的php-cgi进程占用cpu资源过多的原因有:
1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比,但静态资源访问很快,服务器负载也很正常(说明nginx没有问题,而是php-cgi进程的问题),解决办法就是从php.ini中禁止掉eAccelerater模块,再重启php-cgi进程即可
2. 程序中可能存在死循环,导致服务器负载超高(使用top指令查看负载高达100+), 需要借助Linux的proc虚拟文件系统找到具体的问题程序
3. php程序不合理使用session , 这个发生在开源微博记事狗程序上,具体表现是有少量php-cgi进程(不超过10个)的cpu使用率达98%以上, 服务器负载在4-8之间,这个问题的解决,仍然需要借助Linux的proc文件系统找出原因。
4. 程序中存在过度耗时且不可能完成的操作(还是程序的问题),例如discuz x 1.5的附件下载功能: source/module/forum/forum_attachement.php中的定义
function getremotefile($file) {&&& global $_G;&&& @set_time_limit(0);&&& if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {&&& &&& $ftp = ftpcmd('object');&&& &&& $tmpfile = @tempnam($_G['setting']['attachdir'], '');&&& &&& if($ftp-&ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {&&& &&& &&& @readfile($tmpfile);&&& &&& &&& @unlink($tmpfile);&&& &&& } else {&&& &&& &&& @unlink($tmpfile);&&& &&& &&& return FALSE;&&& &&& }&&& }&&& return TRUE;}
没有对传入的参数作任何初步检查,而且设置了永不超时,并且使用readfile一次读取超大文件,就可能存在以下问题:&A. 以http方式读取远程附件过度耗时
&B. FTP无法连接时,如何及时反馈出错误?
&C. readfile是一次性读取文件加载到内存中并输出,当文件过大时,内存消耗惊人
&&&&& 根据实验发现采用readfile一次性读取,内存消耗会明显增加,但是CPU的利用率会下降较多。如果采用分段读取的方式,内存消耗会稍微下降,而CPU占用却会明显上升。
对discuz x 1.5的这个bug较好解决方法就是后台重新正确设置远程附件参数。
以下是我逐步整理的故障排除步骤:
1. 得到占用cpu资源过多的php-cgi进程的pid(进程id), 使用top命令即可,如下图:
经过上图,我们发现,有两个php-cgi进程的cpu资源占用率过高,pid分别是1,这一般都是程序优化不够造成,如何定位问题的php程序位置?
2. 找出进程所使用的文件
/proc/文件系统保存在内存中,主要保存系统的状态,关键配置等等,而/proc/目录下有很多数字目录,就是进程的相关信息,如下图,我们看看进程10059正在使用哪些文件?
显然,使用了/home/tmp/sess_*文件,这明显是PHP的session文件, 我们查看这个session文件的内容为:view_time|
到这里,我们已经可以怀疑是由于php程序写入一个叫view_time的session项而引起, 那么剩余的事件就是检查包含view_time的所有php文件,然后修改之(比如改用COOKIE),这实话, 这个view_time并非敏感数据,仅仅记录用户最后访问时间,实在没必要使用代价巨大的session, 而应该使用cookie。
3. 找出有问题的程序,修改之
使用vi编辑以下shell程序(假设网站程序位于/www目录下)
&#!/bin/bash&find /www/ -name "*.php" & list.txt&f=`cat ./list.txt`&for n in $fdo&&&&& r=`egrep 'view_time' $n`&&& if [ ! "$r" = "" ] ; then&&&&&&& echo $n&&&& fi&&done
运行这个shell程序,将输出包含有view_time的文件, 对记事狗微博系统,产生的问题位于modules/topic.mod.class文件中
http://blog.csdn.net/turkeyzhou/article/details/6709953
/cute/archive//2022280.html
最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了。首先来分析下CPU Load
load average: 0.09, 0.05, 0.01
分别是1分钟、5分钟、15分钟的平均Load。Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一辆车就占不到车道,要等有一个车空出车道。在CPU中可以理解为CPU可以并行处理的任务数,那么就是&CPU个数 * 核数&,如果CPU Load = CPU个数 * 核数 那么就是说CPU正好满负载,再多一点,可能就要出问题了,有任务不能被及时分配处理器,那么保证性能的话,最好是小于CPU个数 * 核数 *0.7。
查看CPU核数可以通过:grep &model name& /proc/cpuinfo
那么以哪个平均值为准呢?如果1分钟平均出现大于CPU个数 * 核数的情况,还不用担心,如果5分钟平均也是,那就要警惕了,15分钟平均也是这样,就要分析哪里出问题了,防范于未然CPU利用率超过100%的问题,也是差不多,top命令应该是把每个核的CPU占用率加起来,算一个和,于是多核情况下会出现超过100%。
另外Context Switch Rate也是个非常值得注意的值,因为线程间切换的代价也是非常高的。
引用一个公式:Context Switch Rate = Interrupt Rate + TPS* N
对于一个多线程的程序,我觉得准备一个控制线程来调度任务是非常必要的,免得线程过于高并发,导致资源的争用和线程切换带来性能问题,最好控制并发的线程数基本等于CPU的总核数,减少这个N,获得更好的处理器性能。
Java 系统性能分析 命令&&
1. cpu分析&&& top , pidstat(sysstat)&&& pid -p PID -t 1 10&&& vmstat 1& CPU上下文切换、运行队列、利用率&&& ps Hh -eo tid&&& pcpu 查看具体线程的CPU消耗&&& sar& 来查看一定世界范围内以及历史的cpu消耗情况信息&&& 查看java线程信息&&& jstack pid | grep 'nid=0x9999'&&&&2. cs sy消耗比较高&&& 上下文切换性能偏高, jstack -l pid, 查看on object monitor&3. io消耗&&& pidstat -d -t -p pid 1 100&&& iostat&4. 网络io消耗&&& cat /proc/interruptes&&& sar -n FULL 1 2&&& tcpdump
版权声明:本文为博主原创文章,未经博主允许不得转载。}

我要回帖

更多关于 谷歌亲儿子手机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信