此服务器上的软件堆栈如下所示:
Solaris 10
Java 1.6
WebLogic 10.3.5(8个域)
在此服务器上运行的应用程序与Oracle数据库通信在另一台服务器上。
此服务器具有32GB的RAM和10个CPU(我认为)。
运行
prstat -Z
会显示以下内容: PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
3836 ducm0101 2119M 2074M cpu348 58 0 8:41:56 0.5% java/225
24196 ducm0101 1974M 1910M sleep 59 0 4:04:33 0.4% java/209
6765 ducm0102 1580M 1513M cpu330 1 0 1:21:48 0.1% java/291
16922 ducm0102 2115M 1961M sleep 58 0 6:37:08 0.0% java/193
18048 root 3048K 2440K sleep 59 0 0:06:02 0.0% sa_comm/4
26619 ducm0101 2588M 2368M sleep 59 0 8:21:17 0.0% java/231
19904 ducm0104 1713M 1390M sleep 59 0 1:15:29 0.0% java/151
27809 ducm0102 1547M 1426M sleep 59 0 0:38:19 0.0% java/186
2409 root 15M 11M sleep 59 0 0:00:00 0.0% pkgserv/3
27204 root 58M 54M sleep 59 0 9:11:38 0.0% stat_daemon/1
27256 root 12M 8312K sleep 59 0 7:16:40 0.0% kux_vmstat/1
29367 root 297M 286M sleep 59 0 11:02:13 0.0% dsmc/2
22128 root 13M 6768K sleep 59 0 0:10:51 0.0% sendmail/1
22133 smmsp 13M 1144K sleep 59 0 0:01:22 0.0% sendmail/1
22003 root 5896K 240K sleep 59 0 0:00:01 0.0% automountd/2
22074 root 4776K 1992K sleep 59 0 0:00:19 0.0% sshd/1
22005 root 6184K 2728K sleep 59 0 0:00:31 0.0% automountd/2
27201 root 6248K 344K sleep 59 0 0:00:01 0.0% mount_stat/1
20964 root 2912K 160K sleep 59 0 0:00:01 0.0% ttymon/1
20947 root 1784K 864K sleep 59 0 0:02:22 0.0% utmpd/1
20900 root 3048K 608K sleep 59 0 0:00:03 0.0% ttymon/1
20979 root 77M 18M sleep 59 0 0:14:13 0.0% inetd/4
20849 daemon 2856K 864K sleep 59 0 0:00:03 0.0% lockd/2
17794 root 80M 1232K sleep 59 0 0:06:19 0.0% svc.startd/12
17645 root 3080K 728K sleep 59 0 0:00:12 0.0% init/1
17849 root 13M 6800K sleep 59 0 0:13:04 0.0% svc.configd/15
20213 root 84M 81M sleep 59 0 0:47:17 0.0% nscd/46
20871 root 2568K 600K sleep 59 0 0:00:04 0.0% sac/1
3683 ducm0101 1904K 1640K sleep 56 0 0:00:00 0.0% startWebLogic.s/1
23937 ducm0101 1904K 1640K sleep 59 0 0:00:00 0.0% startWebLogic.s/1
20766 daemon 5328K 1536K sleep 59 0 0:00:36 0.0% nfsmapid/3
20141 daemon 5968K 3520K sleep 59 0 0:01:14 0.0% kcfd/4
20093 ducm0101 2000K 376K sleep 59 0 0:00:01 0.0% pfksh/1
20797 daemon 3256K 240K sleep 59 0 0:00:01 0.0% statd/1
6181 root 4864K 2872K sleep 59 0 0:01:34 0.0% syslogd/17
7220 ducm0104 1268M 1101M sleep 59 0 0:36:35 0.0% java/138
27597 ducm0102 1904K 1640K sleep 59 0 0:00:00 0.0% startWebLogic.s/1
27867 root 37M 4568K sleep 59 0 0:13:56 0.0% kcawd/7
12685 ducm0101 4080K 208K sleep 59 0 0:00:01 0.0% vncconfig/1
ZONEID NPROC SWAP RSS MEMORY TIME CPU ZONE
42 135 22G 19G 59% 87:27:59 1.2% dsuniucm01
Total: 135 processes, 3167 lwps, load averages: 54.48, 62.50, 63.11
我知道CPU大部分处于空闲状态,但是平均负载很高,这对我来说很奇怪。内存似乎不是问题。
运行
vmstat 15
会显示以下内容: kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s4 sd in sy cs us sy id
0 0 0 32531400 105702272 317 1052 126 0 0 0 0 13 13 -0 8 9602 107680 10964 1 1 98
0 0 0 15053368 95930224 411 2323 0 0 0 0 0 0 0 0 0 23207 47679 29958 3 2 95
0 0 0 14498568 95801960 3072 3583 0 2 2 0 0 3 3 0 21 22648 66367 28587 4 4 92
0 0 0 14343008 95656752 3080 2857 0 0 0 0 0 3 3 0 18 22338 44374 29085 3 4 94
0 0 0 14646016 95485472 1726 3306 0 0 0 0 0 0 0 0 0 24702 47499 33034 3 3 94
我知道CPU大部分处于空闲状态,队列中没有等待执行的进程,几乎没有交换。
运行
iostat 15
给出以下信息: tty sd0 sd1 sd4 ssd0 cpu
tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id
0 676 324 13 8 322 13 8 0 0 0 159 8 0 1 1 0 98
1 1385 0 0 0 0 0 0 0 0 0 0 0 0 3 4 0 94
0 584 89 6 24 89 6 25 0 0 0 332 19 0 2 1 0 97
0 296 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 97
1 1290 43 5 24 43 5 22 0 0 0 297 20 1 3 3 0 94
运行
netstat -i 15
给出以下内容: input aggr26 output input (Total) output
packets errs packets errs colls packets errs packets errs colls
1500233798 0 1489316495 0 0 3608008314 0 3586173708 0 0
10646 0 10234 0 0 26206 0 25382 0 0
11227 0 10670 0 0 28562 0 27448 0 0
10353 0 9998 0 0 29117 0 28418 0 0
11443 0 12003 0 0 30385 0 31494 0 0
我想念什么?
#1 楼
经过进一步的调查,似乎性能问题主要是由于两个系统(Oracle SSXA和UCM)之间的大量网络调用所致。调用速度很快,但数量很多且已序列化,因此CPU使用率低(主要等待I / O),平均负载高(许多调用等待处理),尤其是响应时间长(通过积累小的响应时间)。感谢您对这个问题的理解!
评论
您是如何确认和解决这个问题的?我们看到了同样的问题,并希望检查我们是否有同样的问题
–妖精
18年11月2日在20:31
#2 楼
当您说“高平均负载”时,我假设您的意思是prstat在Total: 135 processes, 3167 lwps, load averages: 54.48, 62.50, 63.11
这些数字的输出数字的底部显示“平均负载”到顶部提供的值,可能意味着正在运行的进程的平均队列大小。这不是使用的处理器时间的百分比,而是有多少“东西”骚扰了CPU以便运行。诚然,它们看起来确实很高,但这全都取决于您正在运行的应用程序。进程获得插槽后实际上可能并不会做太多事情。请参阅此处以获取有关top的详细说明。这可能是导致这些高平均负载数的原因。确保在适当的地方使用连接池连接到后端,并考虑增加应用程序可用于处理连接的空闲线程数(不确定如何在WebLogic上执行此操作; Tomcat具有每个连接器线程池或一般执行程序线程池)。如果不这样做,则可能会产生全新的线程来处理请求。
关于性能,您需要确定应用程序的哪个部分受到影响。是WebLogic / Java方面正在发生的处理,数据库访问,DNS查找(如果由于某种原因而进行了查找...),网络问题或OS上的某些事情。
99%的时间将是您的代码以及如何与保持状态的数据库进行通信。然后将是Web应用程序的配置。到此为止,您将努力从应用程序中挤出最后几毫秒的时间,或者着眼于使用相同的硬件提供更高的并发性。为了进行更精细的性能调整,您需要指标。
对于Java,我建议安装Java Melody。它可以提供有关程序执行情况的大量信息,并有助于缩小程序花费的时间。我只在Tomcat上使用过它,但在任何Java EE容器/ servlet上都可以正常工作。
有很多方法可以调优Java,因此请查看它们的性能准则(我(确保您可能有),并确保设置了适合您程序的正确堆大小等。 Java Melody可以帮助您跟踪正在消耗的Java堆的大小以及垃圾收集器的工作强度/它中断程序清除对象的频率。
我希望很有帮助。如果您提供更多信息,我也许可以更新此答案,并根据您的需求对其进行进一步的完善。
评论
感谢您的回答,如果我的代表足够高,我会投票赞成。根据我的经验,代码或SQL查询通常是罪魁祸首。我进行了几次性能分析,找不到任何热点,这就是为什么我开始研究更基本的因素的原因。我将进行更多调查,并在发现更多问题时更新问题。
– Spiff
2012年1月1日14:02
我还将检查“ mpstat 1 5”的输出,以查看每个处理器的统计信息并查看“ csw”和“ syscl”列。从上面的vmstat看来,您正在执行许多系统调用和上下文切换,这似乎证明了webtoe的怀疑,即您有很多线程(Solaris称它们为LWPs-LightWeight进程)不断骚扰CPU。他们没有一个在运行时做得很好,但是许多人却花时间等待运行,因此平均负载很高。
– eirescot
2012年3月1日22:43
#3 楼
附带说明一下,平均负载还包括等待磁盘活动(例如,骚扰磁盘)以及等待cpu的事物,这是两者的总和...因此您可能会遇到一个问题。 >请参见http://en.wikipedia.org/wiki/Load_(计算)“ Linux还包括处于不间断睡眠状态(通常等待磁盘活动)的[平均负载]进程”“ br />作为一个侧面说明,我遇到的一个特殊问题是我的平均负载较高,但也有大量的闲置CPU和较低的磁盘使用率。 ,有时等待I / O的线程/进程会显示在平均负载中,但不会导致“等待”列的增加。但是它们仍然受I / O约束。
如果在jruby中运行以下代码,您可以说是这种情况(每个100个线程都有很多I / O) :
100.times { Thread.new { loop { File.open('big', 'w') do |f| f.seek 10_000_000_000; f.puts 'a'; end}}}
哪个给出了这样的顶部输出:大量的闲置CPU(0.0%WA),但平均负载非常高。另请参见http://linuxgazette.net/141/misc/lg/tracking_load_average_issues.html
作为进一步说明,这似乎也暗示着(至少在这种情况下-运行CentOS)平均负载将每个线程分别计入总数。
评论
在Linux上,“平均负载还包括等待磁盘活动的内容”,而这个问题最初与Solaris有关,它似乎仅在平均负载中包括正在运行和可运行(即等待CPU)的任务。这个问题的一个Linux版本是这个。
– Nickolay
18年9月12日在11:49
#4 楼
今天遇到了同样的问题。经过研究和诊断,我意识到我的小型VPS磁盘用完了。
在shell /提示(Linux / Unix)类型中
df -h
查看计算机上的可用磁盘。
如果磁盘空间不足,可能是问题/问题。
评论
我猜您是在交换那个吗,是造成它的原因吗?
–rogerdpack
13年7月19日在16:33
#5 楼
在这种情况下另一个有用的工具是nmon。它以一个小包装包含了多种查看其他工具提供的相同数据的方法。
如果这是无法缓存的内容,我建议在tcp模式下将多个服务器放在负载均衡器(例如haproxy)后面以分配负载。
评论
我不习惯使用Solaris,因此我会请别人帮忙,但是我将开始研究您的Web服务器配置。可能是以某种方式人为地控制性能,从而在运行队列中留下很多线程。 (尽管不知道那将是什么,甚至是不可能的)。不过,对于一个写得很好的问题,我们表示敬意。我认为10个CPU可能是问题。在进行进一步调查之前,您应该更准确地了解正在运行的硬件。使用psrinfo -v显示实际的CPU数量。
我从未听说过此命令,但运行该命令时,大约有250个虚拟处理器。那有道理吗?在那种情况下,平均负载为50并不重要?
我认为在磁盘已满时也会发生这种情况。我今天有1%的可用空间,并且负载一直增加到超过19.00,没有明显的原因。腾出一些空间解决了这个问题(问题发生后不久);也可能是巧合。