步骤:
1、先右击鼠标右键点击屏幕最下方的任务栏空白处,会d出一个菜单,在菜单中用鼠标左键点击启动任务管理器。
2、然后点击任务管理器的“性能”选项。在“性能”选项的“cpu使用记录”项中有几个方框就说明cpu有几个线程。
cpu线程数不一定等于cpu的核心数,因为有些cpu采用了超线程技术,一个核心可以有两个线程。
3、如果想查看cpu的核心数可以安装一个CPU-Z软件,打开后就可以看见有几个核心和线程。
4、打开安装的CPU-Z软件,在处理器即可看到核心数和线程数。
PS:超线程处理器的cpu线程数不等于cpu的核心数。cpu线程数不一定等于cpu的核心数,因为有些cpu采用了超线程技术,一个核心可以有两个线程。
以前有过类似的问题 可以参考下:
>
或者这个:
>
(1) 网络原因:比如是否存在跨机房、网络割接等等。
(2) 慢查询,因为redis是单线程,如果有慢查询的话,会阻塞住之后的 *** 作。
(3) value值过大?比如value几十兆,当然这种情况比较少,其实也可以看做是慢查询的一种
(4) aof重写/rdb fork发生?瞬间会堵一下Redis服务器。
一、背景
最近负责做一个平台的poc测试,性 能测试要求测试1000并发下平台的表现,web服务器采用的是weblogic,版本是11g,1036,所有 *** 作都是基于这个版本(因为以前修改 线程数的 *** 作有些基于这个版本不能生效)。在LoadRunner压1000并发下,发现应用表现并不好,响应时间明显增加。
二、分析
监 控服务器资源,发现集群平台服务器负载并不高,而web应用服务器负载同样也不高,服务器性能并没达到瓶颈。进入weblogic控制台,查看线程池,发 现在压1000并发的时候,请求积压队列明显较多,而线程数只有50左右。说明一下,weblogic产品模式下,默认初始线程数为25,开发模式下好像 是15,weblogic11g采用的是自调整线程池,看名字就可以猜出,他会根据应用情况自动增加减少线程数,而实际情况下,在压力增大的情况 下,weblogic也确实增加了线程数,但是增加的线程数不足以应付该需求,于是自然而然地想到了增加线程数。
三、解决
weblogic11g已经不支持在控制台修改线程数,只能通过配置文件,网上有朋友说可以通过增加weblogic启动参数来配置线程数:
-DweblogicthreadpoolMinPoolSize=100
-DweblogicthreadpoolMaxPoolSize=500
该方法经试验,并不能生效,还好还一种方法,修改域下面conf里面的configxml文件:
<server>
<name>AdminServer</name>
<self-tuning-thread-pool-size-min>400</self-tuning-thread-pool-size-min>
<self-tuning-thread-pool-size-max>400</self-tuning-thread-pool-size-max>
<listen-address/>
</server>
在 这里把线程数最大值最小值都设成了400,400这个数值不是乱设的,WebLogic可以近乎线性地提高线程数。线程数越多,花费在线程切换的时间也就 越多;线程数越小,CPU可能无法得到充分的利用。为获取一个理想的线程数,需要经过反复的测试。一般来说一个CPU最好小于50个线程数(注:笔者刚才 发现之前我把CPU数当成了核心数,笔者用的服务器是24核,所以当时理所当然认为设置1000个线程数也是ok的)。最开始使用1000线程数做测试, 因为最大并发数是1000,笔者想象来一个请求就给一个线程处理,没有请求排队,实际上确实如此,但是把线程数调低后,发现即使有排队情况出现,但响应时 间却比之前1000线程要快,为什么会出现这种情况呢?原来还有一点我们忘记了,数据库连接池。数据库连接池也是影响性能的指标之一,想想应用1000个 请求过来,但是数据库连接数不够,在数据库这边排队,还是会影响整体性能表现,所以如何配置weblogic线程数以及数据库连接线程数使整体性能达到最 优,这需要再仔细测试,如果数据库连接数也能设置到1000,我想应该这是一个比较理想的设置,但很多情况下根据平台不同,不可能这么简单,过高的连接数 总会占用过多系统资源,引发GC等一系列问题。笔者的应用根据多次测试,把数据库连接跟线程数设置成了一样的,都是400,这肯定不是最优的,但应该算是 性能表现比较满意的一组值。
四、总结
1、出现性能瓶颈时,先找出现瓶颈的地方,是应用服务器还是数据库服务器
2、判断是否需要修改weblogic线程数以及数据库连接池的值
3、多次测试,得出一组合适的weblogic线程数的值以及数据库连接数的值
第一步,进入 *** 作系统桌面
第二步,右键任务栏,点选启动任务管理器
第三步,d出任务管理器窗口
第四步,->选择列
第五步,d出选择进程页列的窗口
第六步,点选图示线程数的复选框,点击确定
第七步,回到刚才的任务管理器,可以看到线程数的一列数据
threading模块有active_count()方法,它是获取当前激活的线程数量。用法很简单
import threading
threadingactive_count()
VC
获取进程线程数
#include
void
EnumProcess(void)
{
HANDLE
hProcessSnap;
HANDLE
hProcess;
PROCESSENTRY32
pe32;
DWORD
dwPriorityClass;
hProcessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0);
if
(hProcessSnap
==
INVALID_HANDLE_VALUE)
{
return;
}
pe32dwSize
=
sizeof(PROCESSENTRY32);
if
(!Process32First(hProcessSnap,
&pe32))
{
CloseHandle(hProcessSnap);
return;
}
do
{
//printf("%s",
pe32szExeFile);
//完整文件名
//printf("%d",
(int)pe32cntThreads);//线程数
}while(Process32Next(hProcessSnap,
&pe32));
CloseHandle(hProcessSnap);
}
如果要获取进程句柄
HANDLE
hProcessHandle;
hProcessHandle
=
OpenProcess(0x1F0FFF,
true,
ProcessID);//ProcessID进程ID
这个在控制台,Win32
SDK
,MFC
都可以用的,只不过
SDK
,MFC
输出就
不用
printf
了,只要把获取的内容赋给变量就行了
以上就是关于如何查看cpu核心数和线程数全部的内容,包括:如何查看cpu核心数和线程数、怎样得到JVM中当前的活动线程数、如何获取redis的活动线程数量 java等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)