什么是3sat fpga问题 / 蓝讯

&>&用GA、SA实现3SAT问题的求解
用GA、SA实现3SAT问题的求解
上传大小:180KB
模拟退火的方法求解3SAT问题;
GA比起SA ,最大的优势在于对个初始解,而且存在杂交和变异,让SA具有非常强的跳出局部最优解的能力。而且简单通用,健壮性强。但是待定的参数很多,而且计算速度比较慢。选择,杂交,变异算子的选取也很关键
内含详尽的代码与报告说明
综合评分:4
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有5条
自带一组规模较小的输入输出数据,并附有简短的报告;代码不错,不过没有什么注释;算法方面确实实现了GA和SA,比较可惜没有写与之齐名的PSO,没有做其他的优化,代码风格还是不错的;效率方面对于规模较小、难度在3~4以下的合取范式速度较快,如果难度和规模稍有提升,速度明显下降,当然这也是整个世界亟待解决的问题。总的来说,写的不错,完整地传递了GA和SA的思想,值得刚刚接触NP近似计算的新手借鉴并学习!
看过了。代码还是不错的。谢谢!
思路不错,,,谢谢了。
lianyuxuan
综合评分:
积分/C币:3
kalapigdogpig
综合评分:
积分/C币:3
综合评分:
积分/C币:3
hongxinjie
综合评分:
积分/C币:3
综合评分:
积分/C币:3
polarisguo66
综合评分:
积分/C币:10
综合评分:
积分/C币:10
综合评分:
积分/C币:3
rongyuxunzhang
综合评分:
积分/C币:3
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
用GA、SA实现3SAT问题的求解
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
xiaoyao3857
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
用GA、SA实现3SAT问题的求解sponsored links
QTabWidget简例/简介及各种问题
tabWidget = new QTabWidget();
//新建第一个页面的部件
QWidget *widget = new QWidget();
QLineEdit *lineEdit = new QLineEdit();
QPushButton *pushButton = new QPushButton(&Test&);
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout-&addWidget(lineEdit);
vLayout-&addWidget(pushButton);
widget-&setLayout(vLayout);
//新建第二个页面的部件
QLabel *label = new QLabel(&Hello Qt&);
//新建第三个页面的部件
QPushButton *pushButton3 = new QPushButton(&Click Me&);
//向QTabWidget中添加第一个页面
QIcon icon1(&:/new/icon/images/1.ico&);
tabWidget-&addTab(widget, icon1, &Tab1&);
//向QTabWidget中添加第二个页面
QIcon icon2(&:/new/icon/images/2.ico&);
tabWidget-&addTab(label, icon2, &Tab2&);
//向QTabWidget中添加第三个页面
QIcon icon3(&:/new/icon/images/3.ico&);
tabWidget-&addTab(pushButton3, icon3, &Tab3&);
QHBoxLayout *layout = new QHBoxLayout();
layout-&addWidget(tabWidget);
this-&setLayout(layout);
this-&resize(300, 100);
this-&setWindowTitle(&QTabWidgetDemo&);
QTabWidget实现双击关闭tab标签:
设置属性:setTabsClosable&(&bool&closeable&)
涉及到的信号:void&QTabWidget::tabCloseRequested&(&int&index&)&&&[signal]
(此处摘自http://blog.csdn.net/notton/article/details/5996730)
当设置tabbar居左时, 直接用QTabWidget存在的几个问题:
1。文字不是水平显示
2。TabBar的内容显示与StackWidget显示冲突
3。调整单个TabBar的高度
4。单个TabBar的press event响应
5. 文字图片位置显示关系
分析原因:
1。QTabWidget::setUpLayout控制Table与stackwidget的关系, 但setUpLayout是private, 解决方法,就是把它重新实现,跟踪代码,发现在QTabWidget::initStyleOption中调整。
2。文字竖直显示要改成水平显示,需要重新实现tabbar::paintevent, 继承QTabtab, 仿效paintevent简单写一个,问题5与它类似
3。问题3,由于它的信息都存在QTabBarPrivate中,把Rect的top, height按显示顺序调整即可。
& 问题4与它类似,重新实现mousePressEvent即可.&
设置tab不同样式:
setStyleSheet(&QTabWidget::pane{border-width:1border-color:rgb(48,&104,&151);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-style:&background-color:&rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background:&}&\
QTabWidget::tab-bar{border-width:0}\
QTabBar::tab{border-bottom-color:&#C2C7CB;\
&&&&&&&&&&&&&border-top-left-radius:&0\
&&&&&&&&&&&&&border-top-right-radius:&0\
&&&&&&&&&&&&&max-width:&75&min-width:75&min-height:25\
&&&&&&&&&&&&&font:14px&Times&New&R\
&&&&&&&&&&&&&&&&&padding:&0\
&&&&&&&&&&&&&&&&&}\
QTabBar::scroller&{\
&&&&&&&&&&&&&&&&&&&width:25;\
&&&&&&&&&&&&&&&&&&&&&&&border:0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&padding:&0\
&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar&QToolButton::right-arrow&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-color:rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-width:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-image:&url(:/images/tab/rightbtn.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar&QToolButton::right-arrow:hover&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-color:rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-width:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-image:&url(:/images/tab/hoverrightbtn.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar&QToolButton::right-arrow:disabled&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-color:rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-width:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-image:&url(:/images/tab/grayrightbtn.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar&QToolButton::left-arrow&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-color:rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-width:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-image:&url(:/images/tab/leftbtn.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar&QToolButton::left-arrow:hover&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-color:rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-width:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-image:&url(:/images/tab/hoverleftbtn.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar&QToolButton::left-arrow:disabled&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-color:rgb(132,&171,&208);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-width:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&background-image:&url(:/images/tab/grayleftbtn.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:first:selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-left:&30;&margin-right:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url(:/images/tab/sel3.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:first:!selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-left:&30;&margin-right:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url(:/images/tab/normal3.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:first:hover:!selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-left:&30;&margin-right:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url(:/images/tab/hover3.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:middle:selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-top:&0;&margin-left:&-15;&margin-right:&8;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url(:/images/tab/sel3.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:middle:!selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-top:&0;&margin-left:&-15;&margin-right:&8;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url(:/images/tab/normal3.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:middle:hover:!selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-top:&0;&margin-left:&-15;&margin-right:&8;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url(:/images/tab/hover3.png);\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:last:selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-top:&0&margin-left:&0;&margin-right:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url();\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:last:!selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-top:&0;&margin-left:&0;&margin-right:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url();\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:last:hover:!selected&{\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&color:&\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&margin-top:&0;&margin-left:&0;&margin-right:&0;\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&border-image:&url();\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}\
QTabBar::tab:only-one&{\
&&&&&&&&&&&&&&&&&&&&&&&margin:&0;\
&&&&&&&&&&&&&&&&&&&&&&&}&);
tab标签的长度,也需要重载QTabBar来动态计算
QTabWidget简介:
QTabWidget类提供了一堆选项卡式窗口部件。
一个选项卡部件提供了一个标签栏(见QTabBar)和一个“页面区”,用于显示与每个选项卡页面。默认情况下,标签栏显示在页面区上方,但是可以使用配置改变这种默认方式(见TabPosition)。每个选项卡都是关联到一个不同的窗口小部件(页面)。只有当前页显示在页面区域;所有其他页面都是隐藏的。用户可以显示不同的页面通过点击它的选项卡或按其Alt +字母快捷如果它有一个。用户可以使用Tab键来选择不同的页面,或者如果选项卡有快捷键也可以使用快捷键(Alt
+ 字母)来选择。
enum QTabWidget::TabPosition
This enum type defines where QTabWidget draws the tab row:
Constant ValueDescription
QTabWidget::North 0The tabs are drawn above the pages.
QTabWidget::South 1The tabs are drawn below the pages.
QTabWidget::West 2The tabs are drawn to the left of the pages.
QTabWidget::East 3The tabs are drawn to the right of the pages.
enum QTabWidget::TabShape
This enum type defines the shape of the tabs:
Constant ValueDescription
QTabWidget::Rounded 0The tabs are drawn with a rounded look. This is the default shape.
QTabWidget::Triangular 1The tabs are drawn with a triangular look.
正常使用QTabWidget 的方法是按如下步骤:
1、创建一个QTabWidget对象。
2、为选项卡对象中为每个页面创建QWidget对象(页面对象)。注意为QWidget对象指定父对象指针。
3、把子部件插入到页面部件中去,并使用布局管理器管理这些部件。
4、调用addTab()或者insertTab()把页面对象放置到选项卡对象中去,给每个标签设置合适的标签名和一个可选的键盘快捷方式。
标签的位置被TabPosition属性定义,标签的形状被TabShape定义。
当用户选择一个页面时,currentChanged()信号就被发射。
我们可以使用currentIndex()和currentWidget()分别来获取当前页面的索引和当前的窗口部件。为了获取某个页面的指针,我们可以通过widget()函数来获取,此外,我们还可以通过indexOf()函数来获取当前位置的下一个位置的页面的指针。我们可以使用setCurrentIndex setCurrentWidget()或()来显示一个指定的页面。
我们可以使用setTabText()或者setTabIcon()来改变标签文本和图标。可以使用removeTab()来删除某个选项卡及其相关的页面。
在任何给定的时间,每个选项卡都是要么启用或者禁用(见setTabEnabled())。如果启用一个标签,那么该标签的文字是以正常显示的,用户可以选择该选项卡。如果标签被禁用,那么该标签的文字是另一种方式显示来提醒用户不能选择该选项卡。值得注意的是,即使一个选项卡被禁用,该选项卡对应的页面仍然是可见的,例如所有的标签碰巧都被禁用。
对于复杂的对话框,选项卡对话框提供了一个非常好的分解方法;另外一种方法是使用QStackedWidget,这个类提供了在一些页面之间导航的方法。例如:一个QToolBar或QListWidget就提供了这种功能。
QTabWidget的大部分功能是由QTabBar(在最顶端,提供标签)和QStackedWidget(大部分区域,组成一个独立的页面)提供的。
Properties
count : const int
currentIndex : int
documentMode : bool
elideMode : Qt::TextElideMode
iconSize : QSize
movable : bool
tabPosition : TabPosition
tabShape : TabShape
tabsClosable : bool
usesScrollButtons : bool
59 properties inherited from QWidget
1 property inherited from QObject
Public Functions
QTabWidget(QWidget * parent = 0)
~QTabWidget()
int addTab(QWidget * page, const QString & label)
int addTab(QWidget * page, const QIcon & icon, const QString & label)
void clear()
QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
int count() const
int currentIndex() const
QWidget * currentWidget() const
bool documentMode() const
Qt::TextElideMode elideMode() const
QSize iconSize() const
int indexOf(QWidget * w) const
int insertTab(int index, QWidget * page, const QString & label)
int insertTab(int index, QWidget * page, const QIcon & icon, const QString & label)
bool isMovable() const
bool isTabEnabled(int index) const
void removeTab(int index)
void setCornerWidget(QWidget * widget, Qt::Corner corner = Qt::TopRightCorner)
void setDocumentMode(bool set)
void setElideMode(Qt::TextElideMode)
void setIconSize(const QSize & size)
void setMovable(bool movable)
void setTabEnabled(int index, bool enable)
void setTabIcon(int index, const QIcon & icon)
void setTabPosition(TabPosition)
void setTabShape(TabShape s)
void setTabText(int index, const QString & label)
void setTabToolTip(int index, const QString & tip)
void setTabWhatsThis(int index, const QString & text)
void setTabsClosable(bool closeable)
void setUsesScrollButtons(bool useButtons)
QTabBar * tabBar() const
QIcon tabIcon(int index) const
TabPosition tabPosition() const
TabShape tabShape() const
QString tabText(int index) const
QString tabToolTip(int index) const
QString tabWhatsThis(int index) const
bool tabsClosable() const
bool usesScrollButtons() const
QWidget * widget(int index) const
Public Slots
void setCurrentIndex(int index)
void setCurrentWidget(QWidget * widget)
19 public slots inherited from QWidget
1 public slot inherited from QObject
void currentChanged(int index)
void tabBarClicked(int index)
void tabBarDoubleClicked(int index)
void tabCloseRequested(int index)
4 signals inherited from QWidget
2 signals inherited from QObject
重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/ 测试样例简介 Cocos2d-x 为我们提供了十分丰富的测试样例,这些测试样例是在引擎开发过程中为测试引擎的正确性而编写的代码,同时也是演示引擎各个部分如何使用的良好示例. 打开Cocos2d-x根目 ...
-------------------------------------------------------------------------- --
Author : htl258(Tony) --
01:10:28 --
Version:Microsoft SQL Server 2008 (RTM) -
----------------------------------------------------------------------------
Author : htl258(Tony)--
21:00:07--
Version:Microsoft SQL Server 2008 (RTM) - 10. ...
-------------------------------------------------------------------------- --
Author : htl258(Tony) --
08:54:41 --
Version:Microsoft SQL Server 2008 (SP1) -
原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:client在接受到数据后打印出来,然后关闭.程序里有具体的说明,当中对具体的结构体和函数的实现能够參考其它资料. 程序说明: 这里server的port号和ip地址使 ...sponsored links
WinDbg调试CPU占用高的问题 试验+实战 《第七篇》
一、High CPU试验
  1、示例代码
static void Main(string[] args)
Console.Clear();
Console.WriteLine("到命令行下,切换到windbg目录,执行adplus -hang -pn highcpu.exe -o c:\\dumps");
Console.WriteLine("如果要停止,按Ctrl+C结束程序");
Console.WriteLine("====================================================");
while (true)
Console.SetCursorPosition(0, 3);
Console.Write(DateTime.Now.Ticks.ToString());
Console.ReadKey();
  2、运行控制台程序后,抓取3次Dump,最好每次间隔几分钟。
  3、分别对每个Dump执行如下指令。
第一个Dump:
0:& .load clr20\sos.dll
0:& !runaway
User Mode Time
0 days 0:00:00.468
0 days 0:00:00.
0 days 0:00:00.
0 days 0:00:00.
第二个Dump:
0:& .load clr20\sos.dll
0:& !runaway
User Mode Time
0 days 0:00:08.221
0 days 0:00:00.
0 days 0:00:00.
0 days 0:00:00.
第三个Dump:
0:& .load clr20\sos.dll
0:& !runaway
User Mode Time
0 days 0:00:11.559
0 days 0:00:00.
0 days 0:00:00.
0 days 0:00:00.
  从上面的输出可以看到,线程0的CPU时间不断增加,CPU高占用很可能是由于线程0正在执行的代码有问题造成的。
  可以用!clrstack命令查看一下当前的调用堆栈以及其上的局部变量和值。
  当执行!clrstack时,报出了如下提示:
0:& !clrstack
Failed to find runtime DLL (mscorwks.dll), 0x84005
Extension commands need mscorwks.dll in order to have something to do.
  这不是我想要的,加载mscorwks失败。后来经过调试发现,原来是第一步就.load时就错了,因为我的那段代码用的是vs2010。所以应该加载.net frameword 4.0。
  所以,最初应该执行的.load C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/sos.dll
  然后在执行!clrstack
  第三个Dump
0:& !clrstack
*** ERROR: Symbol file could not be found.
Defaulted to export symbols for clr.dll -
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8]
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc]
  第二个Dump
0:& !clrstack
*** ERROR: Symbol file could not be found.
Defaulted to export symbols for clr.dll -
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8]
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc]
  第一个Dump:
0:& !clrstack
*** ERROR: Symbol file could not be found.
Defaulted to export symbols for clr.dll -
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8]
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc]
  不知道为什么,我的第三个Dump并没有出现HighCPU的提示,也许是我的电脑配置有点高吧。不过,出问题的代码已可以看得到,就在Main方法里。只需要细细查看Main方法找到问题所在就OK了。
  学习自:http://www.cnblogs.com/juqiang/archive//1035689.html
二、High CPU问题实战
  公司的系统最近每隔一段时间就会突然变卡,CPU暴增,24核的CPU经常跑到25%,系统卡得不能动。项目经理终于忍不住了,叫我排查一下。
  首先,抓了3个DUMP,都是在系统卡的时候,隔个几分钟抓一次。
  由于服务器是64位的系统,而我的Win7是32位的系统,感觉老是有问题,一方面由于自己还是一个新手,很多问题一碰到就茫然,干脆直接偷偷在服务器装了个Windbg。
  首先,装载如sos.dll
.load C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos.dll
  然后逐个执行"!runaway"然后看下线程的CPU时间:
第一个DUMP:47:4690 0 days 0:10:08.887
83:6914 0 days 0:08:52.727
46:6c88 0 days 0:04:13.813
45:a4d0 0 days 0:04:01.037
40:6d94 0 days 0:03:51.146
44:1c60 0 days 0:03:46.341
39:3fdc 0 days 0:03:46.107
37:eb0 0 days 0:03:28.791
41:11c0 0 days 0:03:27.184
38:9858 0 days 0:03:20.898
49:7b90 0 days 0:03:09.759
第二个DUMP:
47:4690 0 days 0:11:39.570
83:6914 0 days 0:08:54.334
46:6c88 0 days 0:04:46.339
45:a4d0 0 days 0:04:32.518
40:6d94 0 days 0:04:24.889
44:1c60 0 days 0:04:21.894
39:3fdc 0 days 0:04:21.863
37:eb0 0 days 0:04:00.335
41:11c0 0 days 0:03:57.495
38:9858 0 days 0:03:52.753
49:7b90 0 days 0:03:39.353
第三个DUMP:
47:4690 0 days 0:13:01.050
83:6914 0 days 0:08:55.645
46:6c88 0 days 0:05:16.089
45:a4d0 0 days 0:04:59.334
40:6d94 0 days 0:04:55.668
39:3fdc 0 days 0:04:53.328
44:1c60 0 days 0:04:53.079
37:eb0 0 days 0:04:31.800
41:11c0 0 days 0:04:26.496
38:9858 0 days 0:04:20.568
49:7b90 0 days 0:04:06.169
  很明显47号线程占用CPU时间非常厉害。
  查看一下特殊线程:
0:& !threads -special
ThreadCount: 32
UnstartedThread: 0
BackgroundThread: 32
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive
GC Alloc Context
Count APT Exception
180b220 Enabled
0:0 372e6e0
1 MTA (Threadpool Worker)
Special thread type
ThreadpoolWorker
  从输出可以看到,47号线程是一个GC线程。有点眉目了,看到问题的情况极有可能是GC频繁引起的CPU升高。
  我们执行如下命令,查看所有线程的调用堆栈:
0:& ~* kb...
Suspend: 0 Teb: 007ff`ffe56 Unfrozen
: Args to Child
: Call Site
007fe`fd6d10dc : 02`2f3cfe10 01`5faa1eb0 00` 007fe`fd6d64da : ntdll!ZwWaitForSingleObject+0xa
007fe`f128d0e0 : 00`ffffffff 00`ffffffff 02`00 00`00460 : KERNELBASE!WaitForSingleObjectEx+0x79
007fe`f128d1e3 : 00`00 00`09e7e190 00`00 00`ffffffff : mscorwks!MethodTableBuilder::MethodSignature::GetMethodAttributes+0xa8
007fe`f138e250 : 00`0b65c640 007fe`f138e289 0739d`04 00`01 : mscorwks!CLREvent::WaitEx+0x63
007fe`f15a9596 : 00`64 007fe`f129b6cb ffffffff`fffffffe 007fe`f1286920 : mscorwks!SVR::gc_heap::wait_for_gc_done+0x80
007fe`f17339cc : 00`07 007fe`f129b6ef 01`1ff9e250 00`64930 : mscorwks!SVR::GCHeap::GarbageCollectGeneration+0x206
007fe`f13996a2 : 00`00 00`0b65c810 00`64930 007fe`07 : mscorwks!SVR::gc_heap::try_allocate_more_space+0x1ac
007fe`f136ecef : 00`02 00`00 00`38 00`38 : mscorwks!SVR::gc_heap::allocate_more_space+0x32
007fe`f12d7278 : 00`38 00`38 00`09e7e1f8 007fe`f12d71b1 : mscorwks!SVR::gc_heap::allocate_large_object+0x5f
007fe`f12d758e : 00`010b25e0 02`838d92c8 00`6492c 00`3248a : mscorwks!SVR::GCHeap::Alloc+0x198
007fe`f17b9433 : 01`7f8ce378 00`09e7e190 00`0b65c9a8 00`09e7e190 : mscorwks!SlowAllocateString+0x7e
007fe`f051beec : 00`32489 00`00 00`00 00`02 : mscorwks!FramedAllocateString+0xd3
007ff`00cf0313 : 01`5f3ecd98 01`1ff9e098 02` 00`00 : mscorlib_ni+0x2ebeec
007ff`012b0ac5 : 01`5f3ecd98 01`5f418988 01`ff350370 02`4f89cd50 : 0x7ff`00cf0313...
  这时输出的内容可能非常多,但是没关系,我们关注的只是哪个线程引起的GC,我们可以在返回中检索一下GarbageCollectGeneration就OK了,这个是GC的入口函数。
  检索到是83号线程,那么为什么83号线程会触发GC呢?我们切换到线程83。
ntdll!ZwWaitForSingleObject+0xa:
00`776712fa c3
  查看线程的调用堆栈:
0:083& !clrstack
OS Thread Id: 0x6914 (83)
b65cae0 007ff00cf0313 System.String.Concat(System.String, System.String, System.String)
b65cb40 007ff012b0ac5 xxx.TE.Web.Service.Management.CompositeFieldService.GetCompositeFieldContent(System.Web.HttpContextBase, System.String, TE.Web.Domain.Management.CompositeField, Int32)
b65cfd0 007ff0126d39b TE.Web.Areas.Cases.Controllers.WritDataBagController.PageWritContent(System.String, Int32)
b65d410 007fee7ca082c DynamicClass.lambda_method(System.Runtime.CompilerServices.ExecutionScope, System.Web.Mvc.ControllerBase, System.Object[])
b65d460 007fee7ca31ef System.Web.Mvc.ReflectedActionDescriptor.Execute(System.Web.Mvc.ControllerContext, System.Collections.Generic.IDictionary`2&System.String,System.Object&)
b65d4c0 007fee7ca47b5 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(System.Web.Mvc.ControllerContext, System.Web.Mvc.ActionDescriptor, System.Collections.Generic.IDictionary`2&System.String,System.Object&)
b65d500 007fee7ca354f System.Web.Mvc.ControllerActionInvoker+&&c__DisplayClassd.&InvokeActionMethodWithFilters&b__a()
b65d560 007fee7ca3780 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext, System.Func`1&System.Web.Mvc.ActionExecutedContext&)
b65d5f0 007fee7ca3186 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(System.Web.Mvc.ControllerContext, System.Collections.Generic.IList`1&System.Web.Mvc.IActionFilter&, System.Web.Mvc.ActionDescriptor, System.Collections.Generic.IDictionary`2&System.String,System.Object&)
b65d650 007fee7ca9f5d System.Web.Mvc.ControllerActionInvoker.InvokeAction(System.Web.Mvc.ControllerContext, System.String)
b65d6f0 007fee7c9b8f0 System.Web.Mvc.Controller.ExecuteCore()
b65d750 007fee7c9c245 System.Web.Mvc.MvcHandler+&&c__DisplayClass8.&BeginProcessRequest&b__4()
b65d790 007fee7cd4c7f System.Web.Mvc.Async.AsyncResultWrapper+&&c__DisplayClass1.&MakeVoidDelegate&b__0()
b65d7d0 007fee7c9c035 System.Web.Mvc.Async.AsyncResultWrapper+&&c__DisplayClass8`1[[System.Web.Mvc.Async.AsyncVoid, System.Web.Mvc]].&BeginSynchronous&b__7(System.IAsyncResult)
b65d800 007fee7c9b7e3 System.Web.Mvc.Async.AsyncResultWrapper+WrappedAsyncResult`1[[System.Web.Mvc.Async.AsyncVoid, System.Web.Mvc]].End()
b65d840 007feecab5576 System.Web.Mvc.MvcHandler.EndProcessRequest(System.IAsyncResult)
b65d870 007feeca78867 System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
b65d920 007feed16e8f1 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)
b65d9c0 007feed15ef52 System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)
b65db50 007feed140749 System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback)
b65dba0 007feed2713a1 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)
b65dcc0 007feed270f6b System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)
b65de40 007feed270e34 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)
b65dea0 007fef141b08a DomainNeutralILStubClass.IL_STUB(Int64, Int64, Int64, Int32)
b65e6d0 007feed2714d0 DomainNeutralILStubClass.IL_STUB(IntPtr, System.Web.RequestNotificationStatus ByRef)
b65e7b0 007feed270f6b System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)
b65e930 007feed270e34 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)
b65e990 007fef141b2db DomainNeutralILStubClass.IL_STUB(Int64, Int64, Int64, Int32)
  发现到String.Concat就没了,从代码猜测,可能是程序在做字符串拼接,申请内存不到,所以才会触发强烈的GC操作。我们来看看该线程上的内存分配:
0:083& !dso
OS Thread Id: 0x6914 (83)
b65c470 022f3cfe10 System.Web.HttpApplication+PipelineStepManager
System.String
b65ca10 014f620fe0 System.String
System.String
b65ca20 014f621260 System.String
b65ca38 022f3cfe10 System.Web.HttpApplication+PipelineStepManager
b65ca98 022f3cfe10 System.Web.HttpApplication+PipelineStepManager
b65caa0 022f3cfe10 System.Web.HttpApplication+PipelineStepManager
b65cab0 01dfc47d28 System.String
b65cab8 014f621260 System.String
b65cad0 014f620fe0 System.String
b65cb00 014f620fe0 System.String
b65cb30 014f620fe0 System.String
b65cb40 015f3ecd98 TE.Web.Service.Management.CompositeFieldService
System.String
b65cba0 024f89d1f0 System.Collections.Generic.List`1[[xxx.TE.Web.Domain.Management.CompositeField, xxx.TE.Web.Domain]]
b65cbb8 024f89d218 TE.Web.Domain.Management.CompositeField
b65cbc0 024f89db28 System.Text.RegularExpressions.Regex
b65cbc8 024f89e028 System.Text.RegularExpressions.MatchCollection
b65cbd0 011fb05380 System.Collections.Hashtable
b65cbd8 011fb05238 System.String
b65cbe0 011fb05288 System.String...
  由于线程堆栈是执行到字符串就停止了,所以我们找几个字符串试试运气,从最上面(最后)分配的开始:
0:083& !objsize
sizeof() =
0x64920) bytes (System.String)
  400多K的字符串,打开来看下这个字符串里面是些什么?
0:083& !do
Name: System.String
MethodTable: 007fef0667d90
EEClass: 007fef026e560
Size: 411932(0x6491c) bytes
(C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c\mscorlib.dll)
String: 粤A87xxx,粤ACxxx挂......
Value Name
007fef066f
System.Int32
1 instance
205954 m_arrayLength
007fef066f
System.Int32
1 instance
205953 m_stringLength
007fef06697d8
System.Char
1 instance
7ca4 m_firstChar
007fef0667d90
System.String
static Empty
&& Domain:Value
112bef0:01ffe6e0:01ff350370 &&
System.Char[]
static WhitespaceChars
&& Domain:Value
112bef0:01ff350b60 372e6e0:01ff3588e8 &&
  做到这里,本次系统变卡的原因貌似已经有一个说法已经说得过去了,就是Asp.net尝试分配一个大对象,.Net中超过85Kb就叫大对象。但是内存不足,于是触发GC回收,回收不到一个400Kb长的内存块,于是报了一个内存溢出异常。
& & 这个道理乍一看,似乎说得通,但是实际上很诡异,.Net上只是使用了2G左右的内存,一共24G内存的服务器为什么只是用了2G内存,GC拼命回收垃圾呢?为什么只是用了2G内存就分配不出400KB的内存了呢?&
& & 在这个地方,卡住了,中途以为是内存频繁分配造成大量碎片,往内存碎片方向跟过,最后确定与内存碎片无关。原因是不相信这个东西。因为服务器是24核CPU,24G内存。24G内存使用了2G内存就出现这个问题。
& & 这个问题想了两天,百思不得其解。后来,又无意中发现了一个小苗头。
!dumpheap -stat
0:& !dumpheap -stat
007fef0668168
System.OutOfMemoryException
007fef066f8b0
System.Collections.Hashtable+bucket[]
007fef1003
System.String
Total 2737406 objects
Fragmented blocks larger than 0.5 MB:
Followed by
014f92ff10
4.2MB 014fd5c698 System.String
019fb89940
6.3MB 01a01d57b8 System.Threading.OverlappedData
020fb18698
5.7MB 02100ccc70 System.Threading.Overlapped
  在上千行的返回结果中,居然无意中瞟到一个System.OutOfMemoryException。熟悉C#的应该都知道,这个是内存溢出异常,当内存不足时才会发生。
  本来说分配不出400KB内存我还很怀疑,现在又无意中从上千行的返回结果中瞟到这一行代码。确定是内存问题,于是怀疑是Asp.net配置文件不正确,导致系统最多只能够用到2G内存呢?因为Asp.net Web.Config里面的processModel节点有个memoryLimit参数,可以设置Asp.net能够使用的最大内存。但是从网站一直跟到服务器的配置文件,都没有发现有设置该参数,也就是说,Asp.net使用默认设置是60%。24G*60%最大是能够使用14G左右的内存。 太诡异了,实在想不通。最后,只有碰碰运气了,随便输入些变量看看值有没有什么问题。(实际上本处也有章法可依,如果此时找到不问题,最应该就是找到这次请求的参数,重现与当时客户一样的操作),当随手在输入如下命令之后,突然眼前一亮。
  依次执行如下3个指令:
0:083& !do 015f416b08  //换了个DUMP,本来这个地址是出现在 !dso命令里的
Name: System.Web.HttpContext
MethodTable: 007feecc075c8
EEClass: 007feec862438
Size: 336(0x150) bytes
(C:\Windows\assembly\GAC_64\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll)
Value Name
007feecc0a0f0
8 ...IHttpAsyncHandler
0 instance0 _asyncAppHandler
007feecc09c20 4fe7
10...b.HttpApplication
0 instance 022f3cc5d0 _appInstance
007feecc0a160 4fe8
18....Web.IHttpHandler
0 instance 015f418c48 _handler
007feecc0a5a0
20 ...m.Web.HttpRequest
0instance 015f416c58 _request
0:083& !do 015f416c58
&Note: this object has an invalid CLASSfield&
Name: System.Web.HttpRequest
MethodTable: 007feecc0a5a0
EEClass: 007feec863d30
Size: 336(0x150) bytes
(C:\Windows\assembly\GAC_64\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll)
Value Name
007feecb76150
c0...tpValueCollection
0 instance 015f417a80 _queryString
0:083& !do 015f418ec0
Name: System.String
MethodTable: 007fef0667d90
EEClass: 007fef026e560
Size: 90(0x5a) bytes
(C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c\mscorlib.dll)
String:_=2&CaseCode=&Page=0
Value Name
007fef066f 4096
System.Int32
1 instance
33 m_arrayLength
  以上3个命令,分明是找到HttpContext对象,再找到HttpContext对象的Reqest对象,再找到Request对象的QueryString(请求参数)。
  留意CaseCode,居然是Null(由于我对此系统的逻辑还是比较熟悉的。知道CaseCode为Null是不正常的情况)怎么可能呢。用户是怎样操作出来的呢?
& &&打开系统办案台,找到文书随便点一下。最后终于发现,如果用户在相应文书上选择在新窗口中打开(在IE中是鼠标单击的时候轻轻拖了一下),就能够发起这样的请求。
& & & So,我直接在线上的系统模仿了几次这样的操作,并且紧紧盯着资源监视器。发现,在40分钟之后(24核24G内存果然不是盖的),w3wp.exe的内存已经上升到了5G。随后,系统就变慢,跟之前的症状一模一样。
& & 于是,打开本地的代码,找到相应的代码段。
//[HttpPost]为提高性能用GET提交方式
publicActionResult PageWritContent(string CaseCode, intPage)
  此处设置为了允许Get请求,这没什么不妥,但是当我模拟用户操作的时候,进一步跟踪发现,当CaseCode为Null的时候,系统的SQL语句如下:
select xxx,xxx,xx,xxx,xxxfrom xxx
where 1 = 1
and (xxx = 1 or xxx = 0)
and xxx = 0
  这个SQL语句相当于把整个数据库的案件都查出来了。更重要的是,还关联查出了xxx,xxx,xxx,xxx,xxx,xxx,xxx等7张关联表的数据。说白了就是,把系统这几年的数据都翻出来了。由于数据比较敏感,把表名,字段之类的都用xxx代替了。
  当在本地执行相同操作时,Visual Studio输出栏拼命地输出查询语句数千行。
& & 整个问题的来龙去脉是:由于代码逻辑不严谨,导致当缺少参数时,把整个数据库的数据都查询出来,内存不足,.Net的垃圾回收机制启动,尽职尽责的GC努力回收内存,导致CPU飙升,系统运行变慢,甚至卡死,造成客户端长时间无响应。同时,服务器内存是24G,分配给.Net应用程序池更少(不可能把整个数据库的案件全部读取到内存中),导致无论GC如何努力,最终都还是报出了一个OutMemoryException异常。问题终于水落石出。
& & 这个Bug比较隐晦。主要是引起Bug的操作并不会立即看到效果,而是过1、2个小时才会出现变卡的情况,所以很容易过了测试。而在调试阶段,如果程序员不是特别留意那几个页面,也很难会留意到这种问题。
& & 不得不说,通过抓DUMP来找到系统问题,这的确是一门手艺活。能够发现隐藏的比较深的Bug。
  检查过同类型的文书,发现有近一半的文书都是允许以Get方式加载文书,同时又不检查案件编号是否为空的情况,例如xxx文书,xxx文书等。因此,修正如下代码逻辑,在加载文书时,检查案件编号是否为空,当案件编号为空的时候,直接返回。而Get方式加载逻辑上并没有问题,保留也可。
& & 至此,暂时已经解决系统突然变慢的一个问题,下一步就是把代码更新上服务器之后观察一段时间,看还会不会出现有高CPU或内存溢出的其他问题。
paip.cpu占用高解决方案---ThreadMast 跟Process Lasso的使用
作者Attilax ,
EMAIL: 来源:attilax的专栏 地址:http://blog.csdn.net/attilax SELECT
SQL_NO_CACHE CONCAT(dezis.atian
,d.atia ...
本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL ...
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库 他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况 内存占用也很高,占用了3 ...
解决过程: 1,根据top命令,发现PID为7137的Java进程占用CPU高达200%,出现故障. 2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序: 显示结果如下: [app@qxtx-s20-246 ~]$ ps -mp 7137 -o THREAD,tid,time USER %CPU PR ...}

我要回帖

更多关于 3sat 的文章

更多推荐

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

点击添加站长微信