当前位置:主页 > 游戏服务器 > 数据安全 >

云服务器_网站服务器购买_是什么

云服务器_网站服务器购买_是什么

堆栈跟踪

A.使用此工具时

在ASE运行时查看其函数调用堆栈通常非常有用。我将介绍几个特定的用例,并给出一些要查看的示例。一般来说,这项技术最有用的两个症状是当ASE出现挂起时,以及当ASE CPU处于或接近100%忙时。当ASE遇到一些内部错误情况时,如时间间隔或"感染11",它会将堆栈跟踪写入ASE错误日志。但是,如果服务器在某个点挂起或非常繁忙,则可能没有可查看的errorlog stacktrace。在这些情况下,使用操作系统工具生成堆栈跟踪非常有用。

B.查找内容

堆栈跟踪由函数和地址列表组成,最新的调用位于顶部。尽管对特定堆栈跟踪的精确分析可能需要SAP产品支持部门提供的产品内部知识,但我们通常可以通过查看函数名来了解情况。根据这些名称,我们可以确定我们是在看一些错误情况还是资源争用/短缺情况。

当pstack或procstack输出有多个线程时,很难知道应该看哪个线程。这里有一个快速指南:如果您运行的是15.7之前的ASE版本,大数据收集,或者在15.7及更高版本中使用进程模式;那么每个引擎的系统上将运行一个dataserver进程id。该进程的堆栈输出将显示几个线程,但您真正关心的是线程1。请注意,根据您使用的工具,该线程可能位于输出的顶部或底部。如果以线程模式运行服务器,采购返利,则只有一个dataserver进程,pstcak或procstack输出将显示许多线程,大数据应用案例,包括每个引擎一个线程。我们将看下面的一个示例,并说明如何识别属于引擎的线程。

C.特定工具

堆栈跟踪工具的名称将因平台而异。在AIX上称为"procstack",在Linux、HPUX和Solaris上称为"pstack"。不过,所有的语法都是相同的;只是命令名后跟数据服务器进程id(pid)。请注意,如果不是在线程模式下运行,则每个引擎都将是一个具有唯一pid的独立Unix进程,因此,您需要为每一个运行stack命令。

D.示例

pstack 28249

Thread 7(Thread 0x7f114bdfb700(LWP 28250)):

#0 0x0000003736633b57 in sigwaitinfo(),from/lib64/libc.so公司.6

#1 0x0000000000d35c78在kisigwait()中

#2 0x0000003736a079d1在/lib64的起始线程()中/libpthread.so文件克隆中的.0

#3 0x00000037366e8b6d()来自/lib64/libc.so公司.6

线程6(线程0x7f114b3e7700(LWP 28251)):

0 0x0000003736a0e75d从/lib64读取()/libpthread.so文件.0

#1 0x0000000000f1e46b在comn_usig_catcher_thread()中

#2 0x0000003736a079d1在/lib64的start_thread()中/libpthread.so文件.0

#3 0x00000037366e8b6d在克隆()中来自/lib64/libc.so公司.6

螺纹5(螺纹0x7f114a9e6700(LWP 28252)):

0 0x0000003736a0b5bc在pthread\u cond\u wait@@GLIBC\u 2.3.2()从/lib64/libpthread.so文件.0

#1 0x0000000000f1d7ec在comn\u wait\u cond()

#2 0x0000000000ee75cc在rman\u thread()

#3 0x0000003736a079d1在start\u thread()from/lib64/libpthread.so文件.0

#4 0x00000037366e8b6d在克隆()中来自/lib64/libc.so公司.6

螺纹4(线程0x7f1149fe5700(LWP 28253)):

#0 0x0000003736a0b5bc in pthread_cond_wait@@GLIBC_2.3.2(),来自/lib64/libpthread.so文件.0

#1 0x0000000000f1d7ec在comn\u wait\u cond()

#2 0x0000000000ee75cc在rman\u thread()

#3 0x0000003736a079d1在start\u thread()from/lib64/libpthread.so文件.0

#4 0x00000037366e8b6d在克隆()中来自/利伯64/libc.so公司.6

线程3(线程0x7f11495e4700(LWP 28254)):

0 0x0000003736a0b5bc在pthread\u cond\u wait@@GLIBC\u 2.3.2()来自/lib64/libpthread.so文件.0

#1 0x0000000000f1d7ec在comn\u wait\u cond()

#2 0x0000000000ee75cc在rman\u thread()

#3 0x0000003736a079d1在start\u thread()from/lib64/libpthread.so文件克隆中的.0

#4 0x00000037366e8b6d()来自/lib64/libc.so公司.6

线程2(线程0x7f1148be3700(LWP 28255)):

#0 0x00000037366df343 in poll()from/lib64/libc.so公司.6

1 0x0000000000eebfce in sybnet\u do\u poll()

2 0x000000000eeb6ce in sybnet\u async\u poll()

3 0x0000003736a079d1 in start\u thread()from/lib64/libpthread.so文件.0

#4 0x00000037366e8b6d在克隆()中来自/利伯64/libc.so公司.6

线程1(线程0x7f11522ad720(LWP 28249)):

0 0x0000003736a0e6fd in write(),来自/lib64/libpthread.so文件.0

#1 0x0000000000d33570在bŠcwriteŠu控制台()

Š2 0x0000000000d334c7在bŠcerlogŠu uio()

Š3 0x0000000000d32a32仅在ucierrlogŠu中()

Š4 0x0000000000c7d401在exŠprintmsg()

Š5 0x0000000000c7cd03在exŠu doprint中()

6 0x0000000000c96244在exu cleanup()中

7 0x0000000000c7c603在exu print()中

8 0x0000000000c7fbe6在exu callprint()中

如上所述,我们想看看线程1。我们可以看到它正在等待write()系统调用返回。往下看一点,我们可以推断它是在写错误日志或控制台。如果我们在Sybase"Solved Cases"或SAP的Support Portal中查找b\u cerrlog\u uio,我们会发现,当ASE试图写入启动ASE的终端时,会发生此堆栈,云服务器多少钱,但该终端被阻止并且没有接收输出。

2。下面是一个stacktrace的部分示例,该示例取自在线程模式下运行的服务器,该服务器显示为100%繁忙。这是在AIX上运行的服务器的procstack输出:

---tid#24052445(pthread ID:10795)-----

0x00000001017b2dc4 AIX∗get∗lock

0x00000001017777ac ptn∗unkeep

0x00000001017776a8ptn\ U nextcopy

0x0000000101777550 srch\ U get\ U idxptn

0x00000001017d0594 dol_插入.fdpr.chunk.10

0x00000001017ced98 ins_插入.fdpr.chunk.9

0x0000000101805438插入

0x000000010194b100 crt_cols.fdpr.chunk块.23

---tid#31392003(pthread ID:10538)-----

0x0900000000a9cea4

事件睡眠

0x0900000000a9daf8_事件等待

0x0900000000aab724条件等待

本地

0x0900000000aabe7c条件等待

0x0900000000aac73c pthread条件等待

0x000000010008e530 symbol\u fixer.2028。fdpr.chunk块.5

0x000000010064ed10 ktMuxThreadSleep

0x000000010064e714 kt\uu MuxMain

0x000000010064eff0 symbol\u fixer.140。fdpr.chunk块.4

0x0000000101a3f02c线程创建处理程序

0x0900000000a8ad50线程体

----tid#30737349(线程ID:10281)------0x000000010001d820_lock.fdpr.chunk块.1

0x000000010179e248多卢bt_获取下一个.fdpr.chunk.10

0x00000001017c49c4 getnext

0x00000001018c85d8 attrib\U nextrow

0x00000001018c6cd8 cm\U实体\U单独\U p

0x0000000101191e94q\设置\缓存\策略

0x0000000101192e6c q\分数\ nci\扫描

0x000000010118d864 q\分数\有用\ ixscan

0x000000010118bb2c q\选择\最佳\索引

0x00000001005b09e0 q\计算\联合成本

0x00000001005b0784成本\联合成本

0x00000001014f99c8决策.fdpr.chunk.2

0x0000000101573600全部决定

0x00000001014fc004优化_cmd.fdpr.chunk命令.1

0x000000010157329c s\U优化CMDS

0x00000001014f95c4决策子Q

0x00000001014f92d0决策_所有.fdpr.chunk.2

0x000000010157352c optimize\ U cmd

0x000000010157329c s\ U optimizecmds

0x00000001014fde00 s\ U ap\ U compat\ U gen

0x00000001017ae5f4 LeProcessExecStats(ExeCtxt&)

0x000000010030b5a8应用程序::ApGreedyApply()

0x00000001008747dc OptGlobal::_GblSearchEngine.fdpr.chunk块.2(int*)

0x00000001016ccb64 OptGlobal::GblOptimize(int*)

0x0000000101823e30优化

0x000000010182191c s\u编译_stmt.fdpr.chunk块.20

0x00000001018254dc s_编译.fdpr.chunk.14

0x000000010151ecfc s\ U重新编译

0x000000010151e9d8序列器.fdpr.chunk.12

只看第一个和第三个线程,我们看到最上面的函数是ibm\u get\u lock()。

猜你喜欢

微信公众号