墨墨导读:本文来自墨天轮用户“你好我是李白”的投稿,详细介绍数据库告警最核心的一套数据库1节点hang的处理过程。墨天轮主页:https://www.modb.pro/u/3997

某日,数据库告警最核心的一套数据库1节点hang,立马打开连接窗口,查看当前系统负载,发现topas已经无法执行,过滤LOCAL=NO会话kill掉已经无法执行,报错无法分配内存,无法连接数据库,重启操作系统,恢复服务。

事后最终定位问题,发现在执行kill会话命令报错无法分配内存,早已指明了故障原因,服务器相关指标也早已指向内存不足,只是由于以下两方面原因导致定位问题走了许多弯路,甚至一度只能猜测原因:

1. AIX内存由于大部分情况下有很大一部分file cache,导致监控长期显示内存使用率均在90%以上,所以并未真正注意AIX内存各个部分占用比例指标,导致故障服务器内存其实早已在危险边缘试探,而我们并未及时调整。
2. 对AIX内存各个部分占比、管理方式、相关参数设置一知半解,导致未从监控数据相关信息中发现这是由于内存不足-会话增长-内存耗尽导致。

下面就故障分析过程以及AIX内存管理一些参数指标分享,供大家参考。

1. 故障现象

  • 监控系统告警数据库hang,通过已连接ssh会话查看CPU 100%,服务器hang。

  • 除已经连接用户外,无法再通过ssh、sqlplus连接服务器。
    环境概述
    数据库版本11.2.0.4,操作系统AIX 7.1

2. 初步分析,是Oracle还是OS出了问题?

一般对于远程连接无法执行命令,根据经验一般为swap频繁page in、page out,内存耗尽导致,那到底是哪儿出了问题呢?下面就需要结合下面两部分进行分析:

  • 操作系统nmon、oswatcher数据

  • Oracle集群日志、数据库日志进行诊断。、

2.1 数据库日志以及ASH分析

数据库以及集群日志

  1. 故障节点alert日志

  • 在故障前alert日志并无异常,故障期间,可以看到alert日志如下,15:29分之前日志并无异常,未截取。

  • 结合报错Error 1013 during filling up usn avail cache,Oracle Mos有文档,但是与发生故障Oracle版本并不对应,现象也不匹配,所以可以作为参考。

Mon Jan 11 15:29:56 2021AP01: warning -- apply server 20, sid 6085 waiting for event (since 731 seconds):AP01: warning -- apply server 42, sid 6126 waiting for event (since 354 seconds):AP01: warning -- apply server 45, sid 3788 waiting for event (since 342 seconds):AP01: warning -- apply server 44, sid 3530 waiting for event (since 564 seconds):AP01: warning -- apply server 40, sid 2419 waiting for event (since 343 seconds):AP01: warning -- apply server 33, sid 4578 waiting for event (since 344 seconds):Mon Jan 11 15:30:30 2021AP01: warning -- apply server 31, sid 1049 waiting for event (since 435 seconds):Mon Jan 11 15:32:07 2021Mon Jan 11 15:32:07 2021Mon Jan 11 15:32:07 2021[27328748] Error 1013 during filling up usn avail cacheMon Jan 11 15:32:07 2021[19595412] Error 1013 during filling up usn avail cache**********************************************************************************************************************************************Mon Jan 11 15:32:17 2021[16058276] Error 1013 during filling up usn avail cacheMon Jan 11 15:32:12 2021[11799172] Error 1013 during filling up usn avail cacheMon Jan 11 15:32:19 2021[2886074] Error 1013 during filling up usn avail cacheMon Jan 11 15:32:16 2021
  1. 集群日志

  • 可以看到是在节点1告警hang之后,集群监测到了异常。

  • 集群日志并无相关报错信息,只是监测到1节点资源无法确定状态,置为unknown,在其集群其他crsd、cssd、agent日志中均类似,并无相关资源或进程报错。

2021-01-11 15:30:48.975: [UiServer][11311]{1:44279:29645} Done for ctx=132437ab02021-01-11 15:32:27.616: [ COMMCRS][11568]clsc_auth_send: (1325a2470) Connection not active
2021-01-11 15:32:38.344: [ COMMCRS][11568]Authorization failed, network error
2021-01-11 15:32:38.344: [UiServer][11568] clscanswer returned error: 32021-01-11 15:32:55.936: [    AGFW][9769]{0:1071:37} Agfw Proxy Server received the message: RESOURCE_STATUS[Proxy] ID 20481:9128592021-01-11 15:32:55.936: [    AGFW][9769]{0:1071:37} Verifying msg rid = ora.asm wbxtdb01 12021-01-11 15:32:55.936: [    AGFW][9769]{0:1071:37} Received state change for ora.asm wbxtdb01 1 [old state = ONLINE, new state = UNKNOWN]2021-01-11 15:32:55.936: [    AGFW][9769]{0:1071:37} Received state LABEL change for ora.asm wbxtdb01 1 [old label  = Started, new label = ]2021-01-11 15:32:55.936: [    AGFW][9769]{0:1071:37} Agfw Proxy Server sending message to PE, Contents = [MIDTo:2|OpID:3|FromA:{Invalid|Node:0|Process:0|Type:0}|ToA:{Invalid|Node:-1|Process:-1|Type:-1}|MIDFrom:0|Type:4|Pri2|Id:8026336:Ver:2]2021-01-11 15:32:55.936: [    AGFW][9769]{0:1071:37} Agfw Proxy Server replying to the message: RESOURCE_STATUS[Proxy] ID 20481:9128592021-01-11 15:33:20.391: [ COMMCRS][11568]clsc_auth_send: (13254d650) Connection not active
2021-01-11 15:33:22.407: [  OCRMSG][5912]prom_send: Failed to send [12]2021-01-11 15:33:22.407: [  OCRMSG][5912]GIPC error [12] msg [gipcretConnectionLost]2021-01-11 15:33:25.099: [    AGFW][9769]{0:1071:37} Agfw Proxy Server received the message: RESOURCE_PROBE[ora.asm wbxtdb01 1] ID 4097:174860012021-01-11 15:33:25.099: [    AGFW][9769]{0:1071:37} Agfw Proxy Server forwarding the message: RESOURCE_PROBE[ora.asm wbxtdb01 1] ID 4097:17486001 to the agent /u01/11.2.0/grid/bin/oraagent_grid2021-01-11 15:33:26.200: [ COMMCRS][11568]Authorization failed, network error
2021-01-11 15:33:26.201: [UiServer][11568] clscanswer returned error: 32021-01-11 15:34:30.743: [    AGFW][9769]{0:1071:38} Agfw Proxy Server received the message: RESOURCE_STATUS[Proxy] ID 20481:9128922021-01-11 15:34:30.743: [    AGFW][9769]{0:1071:38} Verifying msg rid = ora.asm wbxtdb01 12021-01-11 15:34:30.743: [    AGFW][9769]{0:1071:38} Received state LABEL change for ora.asm wbxtdb01 1 [old label  = , new label = CHECK TIMED OUT]2021-01-11 15:34:30.743: [    AGFW][9769]{0:1071:38} Agfw Proxy Server sending message to PE, Contents = [MIDTo:2|OpID:3|FromA:{Invalid|Node:0|Process:0|Type:0}|ToA:{Invalid|Node:-1|Process:-1|Type:-1}|MIDFrom:0|Type:4|Pri2|Id:8026352:Ver:2]2021-01-11 15:34:30.743: [    AGFW][9769]{0:1071:38} Agfw Proxy Server replying to the message: RESOURCE_STATUS[Proxy] ID 20481:9128922021-01-11 15:34:53.907: [    AGFW][9769]{0:1071:38} Agfw Proxy Server received the message: CMD_COMPLETED[Proxy] ID 20482:174860282021-01-11 15:34:53.907: [    AGFW][9769]{0:1071:38} Agfw Proxy Server replying to the message: CMD_COMPLETED[Proxy] ID 20482:174860282021-01-11 15:34:53.907: [    AGFW][9769]{0:1071:38} Agfw received reply from PE for resource state change for ora.asm wbxtdb01 12021-01-11 15:35:41.347: [UiServer][11568] CS(1324f3910)set Properties ( grid,13241e050)2021-01-11 15:35:59.223: [UiServer][11568] CS(1325501f0)set Properties ( grid,13254f990)
  1. ASH信息

  • 可以看到在故障前并无异常等待事件,均为正常OGG集成投递以及一些weblogic正常执行SQL会话。

  • 由于此时操作系统已无法响应,所以15:30~15:36相关信息ASH中未采样到。

2.2 操作系统监控数据分析

遇到数据库严重故障,操作系统的CPU、memory、I/O等信息对定位问题就变得非常重要,
不结合操作系统监控数据往往只能根据数据库残留的一些信息对故障原因进行猜测。
  1. oswatcher数据
    oracle 11.2.0.4 RAC会自带oswatcher,可通过下面命令查看oswatcher数据存放目录,默认30秒采样一次,保留48小时。

# ps -ef|grep OSWoracle    2087 27820  0 10:01 pts/3    00:00:00 grep --color=auto OSWgrid      3638     1  0 Jan21 ?        00:22:47 /bin/sh ./OSWatcher.sh 30 48 NONE /u01/app/grid/tfa/repository/suptools/db-oracle-node1/oswbb/grid/archivegrid      4224  3638  0 Jan21 ?        00:01:03 /bin/sh ./OSWatcherFM.sh 48 /u01/app/grid/tfa/repository/suptools/db-oracle-node1/oswbb/grid/archive

拿到oswatcher archive目录所有数据之后,可将数据拷贝至任意安装java机器或windows机器使用如下命令解析:

如果解析报错[10:02:01]An exception occured in insertVmstatLists on line 0,则需要设置相应时间格式如下: # Linuxexport LANG=zh_US需要英文格式时间戳,重新设置LANG变量,重新运行java -jar即可# windows如果是想在windows机器上解析osw文件,需要在控制面板-区域-中设置为英语(美国)即可。 命令:  java -jar -Xmx512M OSWbba.jar -i /mnt/hgfs/database/oswbb/archive  OSWbba.jar可以通过拷贝服务器端,也可以单独下载oswatcher使用解压后的oswbba。jar
  • 可以看到在故障时间段15:30~15:45期间,CPU到最后15:45左右服务器hang都没有达到100%。

  • 在故障期间,发生了内存交换,这说明故障期间,可用内存不足,内存耗尽。

  • oswatcher还会生成每隔30秒的ps命令生成的进程信息,我们通过分析ps相关信息发现LOCAL=NO会话在故障前后如下:
    在15:00到15:15分左右,LOCAL=NO会话由2800增长至3500,15:15到15:30左右,会话数维持在3500左右略有下降,在15:30到15:45服务器hang期间,会话由于得不到响应,暴涨至最高4500直到重启服务器。
    注:所以oswatcher的ps统计信息也是非常重要的信息,可以真实判断会话总数趋势。

  1. nmon数据

  • 如果说oswatcher图粒度不够细,那么nmon数据展示则更为容易分辨趋势。

  • 下面就从摘取最为重要的三个维度CPU、磁盘I/O、内存趋势图:



2.3 初步分析结果

  • 结合OS监控、数据库日志,我们可以初步推断为操作系统内存耗尽,引发swap使用,从I/O hdisk0达到busy 100%也可印证,导致服务器hang,进而导致数据库hang。

  • 以前没注意过AIX内存管理机制,所以未对相关重要指标进行监控以及管理,导致服务器内存其实早就已经开始在危险边缘试探而我们却并未在意,最终导致业务期间会话突增700连接压垮服务器,引发故障。

  • 至于应用为何突然增加700会话由于某些原因并未深究,但是这次故障也提醒了我们需要在一些服务器细化重点指标监控上注意,防患未然。

3. 进一步分析,服务器内存早已岌岌可危

  • 为什么说服务器内存早已岌岌可危,我们从下面两张图开始分析(第二张图为第一张图的数值):

  • 看到这里,其实对AIX内存有所了解即可一眼判断,服务器内存是真的已经不足了这是因为:

  • %comp计算内存在故障前已经达到95%以上,内存即将耗尽。

4. 通过故障,了解AIX内存管理

俗话说,吃一堑长一智,其实了解清楚AIX内存管理方式以及各个指标含义,定位问题之后,发现故障很严重,但是原因远比想象简单,我们也从故障中吸取教训,下面就详细讲述AIX内存管理。

4.1 AIX内存分类

AIX内存可通过用途分为两大类:

1. Computational memory, also known as computational pages, consists of the pages that belong to working-storage segments or program text (executable files) segments.2. File memory (or file pages) consists of the remaining pages. These are usually pagesfrom permanent data files in persistent storage.

上述AIX官方文档描述,引用http://blog.itpub.net/29455589/viewspace-1075369/叙述:

~计算内存:凡是进程/程序运行中用程序代码向操作系统申请的内存,全部是计算内存,也就是说除非这个程序运行起来,除了自身代码占用的内存,一点额外的内存也不用, 否则它几乎必然会造成计算内存占用的。说“几乎”,是因为计算内存、非计算内存都是指物理内存,如果一个程序申请了1MB内存,但一段时间没有用这部分内存, 很可能在其他进程需要内存,且物理内存比较紧张时,按照LRU算法(Latest Recently Unused),被操作系统部分或全部page out到paging space中, 如果全部被page out了,可以说这个时刻,此进程没有使用计算内存。换句话说,就是程序申请了1MB内存,那么它在某一时刻占用的计算内存从0字节~1MB都有可能。当进程退出,或者意外崩溃,对于操作系统来说,它知道进程不在了,而进程申请的内存,操作系统明确知道是哪些的,在资源回收的过程中, 会自动把这个进程申请的内存释放掉,这个过程是很快的。所以我们可以看到:如果计算内存高企,我们把应用一停,也就是把使用计算内存最多的进程停止,计算内存占用率立刻就下来了。~
~非计算内存:操作系统明确知道这部分内存的用途是放硬盘对应数据的,所以,显然这部分内存不是任何进程可以控制,也就是说不可能一个程序主动要求分配多少非计算内存或者释放多少。这部分完全是操作系统在直接管理:分配、记录状态、使用、释放,其他进程只可能用间接手段影响非计算内存,例如读写文件。~
  • 可以看到主要两部分%comp %ncomp内存组成,这两个指标可以通过topas或nmon获得。

  • 从解释中可以看出,SGA与PGA所占用内存均为%comp,均需要程序自己去释放,不属于AIX VM管理范畴,所以这也就是上述案例中计算内存达到95%以上继续申请计算内存,由于内存耗尽系统使用page space导致系统hang。

4.2 AIX内存控制参数

AIX内存控制参数主要为如下:

- minfree     最小保留内存,当内存总页数少于该值,则AIX开始steal页面,steal页面来源方式由于内存使用不同而不同,AIX 7.1 默认960- maxfree     当内存free list不足minfree时steal页面,当free达到maxfree时停止steal,AIX 7.1 默认1088- minperm/minperm%   最小file page数量或比例,AIX 7.1 默认3%- maxperm/maxperm%   最大file page数量或比例,AIX 7.1 默认90%- maxpin%             最大可以pin住的内存比例,默认90%- maxclient%         jfs2 文件系统缓存使用client page,不能超过%maxperm,AIX 7.1 默认90%- lru_file_repage    控制当file page占用比例在%minperm与%maxperm之间时,内存管理repaging时是否steal计算内存与file page,AIX 5L默认为1,AIX 6.1默认为0,一般设置为0,AIX 7.1之后vmo命令已经无法设置该命令。

相关概念:

  • 当file page占用在%minperm与%maxperm之间时,当根据lru算法需要repage内存或内存不足需要steal page时,AIX 7.1会默认只steal file page,也就是不会偷计算内存。

  • 当file page占用在%minperm之下时,一般来说,低于%minperm除了个别非常空闲系统以外,基本发生在计算内存占用非常大,导致file page无法获得更多内存,即物理内存紧张时,所以此时需要repage时,会同时根据lru算法steal计算内存与file page。上文例子即发生了这种情况,如果当物理内存不足,所有内存均在使用,无法repage完成内存申请,则会发生page space使用,内存耗尽,服务器hang。

4.3 AIX内存配置与查看

# vmo -a      查看所有vm相关设置# vmo -a      查看虚拟内存机制相关设置   # vmo -r -o minfree=1000 -o maxfree=1008 # vmo -p -o maxclient% = 90 # vmo -p -o maxperm%=90 可以指定百分比也可以指定绝对值maxperm参数 # vmo -p -o minperm%=5  可以指定百分比也可以指定绝对值minperm参数

注:-r与-o结合,设置reboot values,-p对当前与reboot都生效,但是只能用于可动态调整参数,默认AIX page为4k,不带%为page数量。有个别参数不可动态调整,不可使用-p选项设置。~

# svmon -G            查看内存使用概览 # svmon -U oracle    查看某个用户使用内存概览

4.4 AIX的大页

# vmo -r -o lgpg_size=16777216 -o lgpg_regions=256 配置256个16M页面。如果要为共享内存使用大页面,还需要将AIX的v_pinshm参数设置为1(默认为0),使VMM可以固定内存池中的页,以避免发生页面交换 # vmo -r -o maxpin%=50     最大可以pin住内存比例 # vmo -r -o v_pinshm=1 允许共享内存pin住 SQL> alter system set lock_sga=true scope=spfile sid='*';   配置Oracle可以锁定共享内存SGA钉在内存中

5. 需要调整AIX VM相关参数吗?

AIX UNIX系统的配置策略,在默认情况下是为文件系统类应用默认的优化。如果应用是AIX上运行的数据库类应用,则默认的AIX配置并不适用。

所以如果是作为数据库服务器,则默认的内存相关参数还是需要进行调整,可以适当调整minfree与maxfree,降低%maxperm,同样也适用于Linux,在Redhat Linux中,对应参数为vm.min_free_kbytes,但是也不建议将这些参数调整过大,调整过大将导致内存无法充分利用,会适得其反。

总结

1. 当故障原因定位方向正确时,会发现处处留存的线索都对的上,当方向不正确时,总会有很匪夷所思的地方。2. 对于AIX、Linux运行不同类型服务需要设置合理参数,虽然本次故障并不是由于参数设置导致。3. 对于监控系统,要监控一些重点指标,本次案例就是由于监控一直报各个系统内存使用率过高(大部分为非计算内存占用)将真正计算内存占比很高的服务器的告警淹没在了平时认为可忽略的告警消息中。

下面为AIX参数官方文档解释:

1. lru_file_repage AIX 7.1 vmo已经无法查询该参数when the number of permanent memory pages (numperm) falls between minperm and maxperm (or the number of client memory pages falls between minperm and maxclient), this setting indicates whether repaging rates are considered when deciding to evict permanent memory pages or computational memory pages. Setting this to 0 tells AIX to ignore repaging rates and favor evicting permament memory pages, keeping more computational memory in RAM. The AIX 5L default is 1/true (consider the repaging rate), The AIX 6.1 default is 0/false (now a restricted setting).
2. maxpin% tunable can be used to adjust the amount of memory that can be pinned. The maxpin% tunable specifies the maximum percentage of real memory that can be pinned.
3. minperm%   maxperm%If percentage of RAM occupied by file pages falls below minperm, page-replacement steals both file and computational pages.If percentage of RAM occupied by file pages is between minperm and maxperm, page-replacement steals only file pages.
4. maxclient%The maxclient parameter controls the maximum percentage of memory occupied by client-segment pages which is where Enhanced JFS file data is cached. Note that the maxclient value cannot exceed the maxperm value.Maxclient represents the maximum number of client pages that can be used for buffer cache.The enhanced JFS file system uses client pages for its buffer cache. The limit on client pages in real memory is enforced using maxclient.The LRU daemon begins to run when the number of client pages is within the number of minfree pages of maxclient 's threshold. The LRU daemon attempts to steal client pages that have not been referenced recently. If the number of file pages is lower than the value of the minperm parameter, any page that has not been referenced can be selected for replacement.Maxclient also affects NFS clients and compressed pages. Also note that maxclient is generally set to a value that is less than or equal to the maxperm parameter.
5. minfreeMinimum acceptable number of real-memory page frames in the free list. When the size of the free list falls below this number, the VMM begins stealing pages. It continues stealing pages until the size of the free list reaches maxfree.
6.  maxfreeMaximum size to which the free list will grow by VMM page-stealing. The size of the free list may exceed this number as a result of processes terminating and freeing their working-segment pages or the deletion of files that have pages in memory.The VMM attempts to keep the size of the free list greater than or equal to minfree. When page faults or system demands cause the free list size to fall below minfree, the page-replacement algorithm runs. The size of the free list must be kept above a certain level (the default value of minfree) for several reasons. For example, the operating system's sequential-prefetch algorithm requires several frames at a time for each process that is doing sequential reads. Also, the VMM must avoid deadlocks within the operating system itself, which could occur if there were not enough space to read in a page that was required to free a page frame.

参考

1.https://www.ibm.com/support/knowledgecenter/ssw_aix_71/performance/mem_perf.html
2. http://blog.itpub.net/29455589/viewspace-1075369/

作者

陈振海,4年数据库运维经验,擅长Oracle、MySQL,具有Oracle 11g OCM、OBCA等数据库认证,长期服务于公安、保险、税务等客户。

墨天轮原文链接:https://www.modb.pro/db/44573(复制到浏览器中打开或者点击“阅读原文”立即查看)

推荐阅读:267页!2020年度数据库技术年刊

推荐下载:2020数据技术嘉年华PPT下载

2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“2020DTC”获得!

视频号,新的分享时代,关注我们,看看有什么新发现?

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

从Oracle数据库故障到AIX内存管理相关推荐

  1. Oracle数据库的体系结构和用户管理

    一.Oracle体系结构 数据库的体系结构是指数据库的组成.工作过程.以及数据库中数据的组织与管理机制,要了解Oracle数据库的体系结构,必须理解Oracle系统的主要组件和重要概念. 1.Orac ...

  2. 分享一次生产应用无法连接Oracle数据库故障

    故障简介 今天一个应用运维同事微信联系我,说有一个应用日志,显示连接Oracle数据库报错,我问了一下是什么应用,对方回答是报表应用,这下心里有谱了. 第一:报表应用重要性不高 第二:一般这种情况,都 ...

  3. oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例

    一.问题背景: 某个项目的线上环境oracle数据库挂了,同事急匆匆来找我救火.我简单咨询了一些基本情况:线上环境,docker部署,已正常运行半年.由于宿主机的根目录硬盘空间不够,运维的同事想把or ...

  4. .net千万级数据导出_记一次解决docker下oracle数据库故障事例

    一.问题背景: 某个项目的线上环境oracle数据库挂了,同事急匆匆来找我救火.我简单咨询了一些基本情况:线上环境,docker部署,已正常运行半年.由于宿主机的根目录硬盘空间不够,运维的同事想把or ...

  5. 故障分析:从Oracle数据库故障到Linux nproc算法

    墨墨导读:本文来自墨天轮用户"你好我是李白"的投稿,使用root用户切换grid用户时报错-bash: fork: retry: Resource temporarily unav ...

  6. oracle启用amm,Oracle11g自动内存管理(AMM)相关的初始化参数

    ORACLE对内存的管理越来越趋向智能化.自动化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Manageme ...

  7. oracle数据库故障紧急处理预案-----各种物理文件损坏和逻辑故障的解决办法

    Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障.这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起.所以我们首先要判断问题的起因, 如果是硬件故障则首先要解决硬 ...

  8. oracle如何设置归档策略,oracle数据库rman归档设置和管理

    一 设置为归档方式 1 sql> archive log list;#查看是不是归档方式 2 sql> alter system set log_archive_start=true sc ...

  9. oracle数据库sysaux表空间,如何管理oracle数据库的SYSAUX表空间

    关闭不必要的审计,aud$. 移动到别的表空间,一些审计登录审计可以关闭,我个人建立登录审计,仅仅审计不成功的登录. 我以前笔记: NOAUDIT CREATE SESSION WHENEVER SU ...

最新文章

  1. 武汉理工大学软件质量保证与测试,材料测试技术(武汉理工大材料测试技术(武汉理工大学).pdf...
  2. JS实现表格Table动态添加删除行
  3. java.lang.UnsatisfiedLinkError: No implementation found for void com.mchsdk.paysdk.net.MCHKeyTools.n
  4. java怎么给list集合排序_java list集合排序按某一属性排序操作
  5. 上海师范大学计算机作业网址,新SQL——SERVER实验练习答案.doc
  6. 用python画雪花飘落_简单说 JavaScript实现雪花飘落效果
  7. mysql报错2059
  8. android bootstrap功能,整合QMUI Android和Android-Bootstrap
  9. JS函数之间的调用(函数内调用一个函数、调用函数内部的函数)
  10. 【知识梳理】《Kafka权威指南》知识梳理
  11. 【Centos7】GCC版本编译升级
  12. Windows怎么查看开关机记录事件?
  13. Anaconda下载安装以及Tensorflow和Pytorch的安装
  14. 计算机怎么升级64位操作系统,如何将计算机的32位更改为64位
  15. 程序员的 Python“劝退”指南!
  16. chrome无法打开无痕模式的解决方案
  17. 事后审计 vs 事前审批
  18. 【实验】编译原理——编译器认知实验
  19. 测绘工程与计算机论文,(完整版)测绘工程毕业论文.doc
  20. 第一篇:基于小米手机的,解锁教程教学

热门文章

  1. opensource项目_最佳Opensource.com:访谈
  2. 为什么Python 4.0不会像Python 3.0
  3. 让电脑说话代码_让您的代码为您说话
  4. (28)自动化构建工具Gulp
  5. 设计模式 接口隔离原则
  6. JavaScript之call,bind,apply方法及 this 的用法辨析
  7. linux 审计oracle,开启和关闭oracle数据库中的审计功能
  8. Python的解释器和字节码
  9. 天正电气html帮助,天正电气绘图经验心得
  10. vue页面锚文本_Vue如何实现锚点定位功能?