Domino NSD日志诊断/分析

2024-01-28 05:38
文章标签 分析 日志 诊断 domino nsd

本文主要是介绍Domino NSD日志诊断/分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着Domino服务器在生产环境中的长时间运行,用户量增多,数据量增大后,会带来一系列的问题;如宕机频繁、运行效率低下、系统资源消耗大等现象。本身Domino属于文档型数据库,在数据库中的文档数量越多,数据库越大;访问效率就会越低。大多数项目初期:

程序员为了完成任务或赶工,编写过程中并不会考虑程序运行效率、容错等问题;

在布署运行环境的时候,一般不会全面考虑服务器的运行状况,不会对服务器进行相应的性能优化和调整;所以在数据量增大和用户数增大时,出现性能低下等问题。

基于以上现象,客户满意度达不到,有可能造成项目失败的可能性。

遇到这类情况后,Domino管理员就有必要通过一系列手段来评估目前环境的问题在哪?性能瓶颈在哪?主要什么原因引起的?应该如何进行调整?

在我眼中Domino管理员工作是非常复杂和繁锁的,Domino管理工作可以细分从服务器管理、数据库管理、邮件管理、人员管理、安全管理、复制管理、策略管理等,这些工作你可以一人完成(这个人要相当牛B了,对Domino运行机制,邮件路由机制,复制机制,Internet协议等都要有比较深层次的了解),也可以一个小组来完成。

如果做为一个合格Domino管理员,不懂得如何编写程序,可以说根本算不上一个真正的系统管理员。就像二流黑客拿一些专门的黑客工具黑网站,黑QQ号一样,只知道机械化的做,并不知道为什么要这么做,基础原理是什么。

当你的Domino服务器宕机后,向IBM800电话支持,他们都会要求你提供NSD日志给他们进行分析,经他们分析后,会告诉你宕机原因,是由什么由于引起宕机。

言归正传,我们先讲讲如何分析NSD日志,并从中找出服务器目前的问题所在,宕机目要是由什么引起的。

NSD日志存放于%DominoData%/IBM_TECHNICAL_SUPPORT目录下,文件格式:

nsd_ _ _<日志生成日志(YYYY_MM_DD)>@<日志生成时间(HH_MM_SS)>.log

例:

  • nsd_all_AIX_as2_2008_04_03@17_32_40.log
  • nsd_W32I_as5_2008_07_18@11_07_24.log

以文件名能很快清楚服务器的基本信息。

NSD分析工具有两种(目前我所知道的,也许还有其他的)LazaLotus Notes Diagnostic(简称:LND)两种,大致功能是相同的,Laza因为有SPR库和PMR库支持,可以快速的找出服务器宕机的解释和解决办法,但是SPR库和PMR库,IBM是不对外开放;所以我们使用的话Laza或LND是没区别的。我推荐大家使用LND足够了,简单方便,配合Google查询足够完成NSD分析工作。

如何分析?很简单,安装完LND后,启动Lotus Notes客户端,打开LND库(LND缺省会将lnd.nsf安装在你%NotesData%/LND目录下),如下图:

image

单击"Open & Process a file",打开一个NSD文件,则会将一个NSD进行分析,并将结果保存在Notes文档中。NSD分析结果文档分为以下部分:

  • Stack:记录引起宕机的主要Stack片断信息
  • HighLights:主要强调的错误信息,包括出错任务名称、进程号或内存地址等
  • SPR Search:SPR查询关键字,使用这些关键字,在IBM Support网站上能查询相关信息;(这个是最有效的解决办法之一)
  • Options:设置信息,可以不管
  • Stack related infos:记录详细的Stack信息,分为以下几个部分,其中观察红色加粗部分就可以定位宕机主要原因以及所由哪个用户在使用哪个数据库中哪个文档(文档中调用了哪段程序)所引起的:
    • open database(s) by the process:进程打开的数据库
    • Possible file name(s) in stack frames:可能涉及到的数据库文件名
    • Process Associated Collection(s)&View(s):进程所涉及到的集合和视图
    • Process Handle Table Info:进程所涉及到的Handle Table信息
    • Process Memory:进程使用内存情况
    • Process Memory Mapping:进程使用内存地址映射表
    • Process Top 10 Memory block usage:进程中前10个内存块使用情况
    • Shared OS Fields共享OS区(此处记录了宕机的主要原因)
    • Stack frames Dump:Stack结构回收信息
    • Virtual Thread(s):所涉及的虚拟线程(此处记录了宕机时所涉及到的数据库、文档以及Domino设计元素)
  • System related infos:系统相关信息,如果你对服务器的软/硬件环境非常了解,可不关注此部分,
  • Debug:调试方法,当出现宕机后,可以使用这里提供的方法对Domino服务器进行调试。如果前面的Stack related infos定位不到宕机的真正原因,才使用这里面介绍的方法进行调试;不过大部分错误能在Stack related infos找得到,并配合IBM Support网站或官方论坛找到相应的解决办法。

NSD分析思路

1.通过LND解析NSD后,首先查看Stack信息,如下图:

image

2.从上图不难看出主上宕机原因,然后在SPR Search标签中可得到相关的查询关键字,如下图:

image

通过这些关键字,你能在IBM Support网站上或官方论坛上找到相关的信息或解决方案。找到这些答案基本上分析工作就完成了。根椐IBM Support网站上提供的解决方案,对服务器做出相应的调整即可解决宕机问题。但如果SPR Search标签中并未提供查询关键字(有些NSD并未提供这些,这说明并不是Domino本身BUG所引起的,是由于你写的程序引起了宕机),所以我们得进一步分析是哪个数据库中哪段程序引起这个原因的,HEHE。

3.打开Stack Related Infos标签,展开Shared OS Fields区段,如下图:

image

从上图我们可以看出宕机的原因和引起宕机的服务和相关线程。在某些宕机情况下FaultRecovery中会记录明显的错误,而不是内存地址信息;如:PANIC:XXXXXXXX等,你可以以此为关键字去IBM Support网站上查询相关信息,帮助你分析宕机原因,也可以直接得到答案。^_*

4.从上面示例中,我们得到了引起宕机的线程号,展开Virtual Thread(s)区段,通过比较相关线程号,就能定位到是由哪个数据库中哪个设计元素引起的宕机。如下图:

image

通过相关线程号与VThread ID的对应,我们找到了是由哪个用户操作哪个数据库引起的宕机。其中也记录了用户操作的文档所引起的宕机。其中NoteID为Domino数据库元素(名括设计元素和文档)标识,Class为元素类别。元素类别如下:

Note Class

描述

0x0001

文档

0x0004

表单

0x0008

视图

0x0040

ACL

0x0200

代理

0x0800

公式

5.得到NoteID后,如何定位至元素呢?NSD中NoteID是以10进制方式表示的,如果要在Domino环境中查找相应的元素时,先将NoteID转成16进制再进行查询。

打开Domino Administrator,在“File”标签中选中相应的数据库,在右边工具栏选“Find Note”,输入NoteID,即可找到相应的元素,如下图:

image

通过以上方法对NSD分析,能快速有效的找到服务器宕机的真正原因在哪,并有针对性的提出解决方案;也能找到是由于哪段程序引起了Domino服务器宕机,为什么会引起宕机,可快速的修正代码错误。

以上方法主要通过LND工具进行分析。LND工具并不能100%从NSD中找到问题所在,这时你就得使用LND工具分析+手工分析方式。手工分析方法请参考Hands On NSD。Hands on NSD介绍了NSD文件的组成,分析方法,步骤等。

从项目角度上来说,造成大部分宕机的原因80%以上都是程序代码所造成的。所以开发人员在实施项目或开发产品时应该充分关注自己编写代码的质量,容错,性能,扩展等问题,不要为了完成任务而不注重质量。如果只是为了完成任务,客户满意度达不到,项目不能验收,将来返工,同样也耗费了大量的时间,也给以后的维护人员带来了很大的维护工作量,更重要的是不利于产品构架的扩展和性能高的应用。这年头客户不是傻子,好不好用人家说了算,验不验收人家说了算,不要涂一时快活给整个团队带来麻烦。

现在大家都会说,规范能说出一整套一整套的,但真正做到的没几个。从点滴做起,从自己做起,规范自己就是提高自己。

这篇关于Domino NSD日志诊断/分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652623

相关文章

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group