草庐IT

聊聊操作系统监控利器OSW

白鳝 2023-03-28 原文
​国产数据库/开源数据库监控中,操作系统监控是十分重要的一方面。最近遇到几次用户的数据库问题,最后都是定位到了操作系统方面的性能问题。D-SMART在针对Oracle数据库运维的时候,我们提供了一个工具,用于对OSW的数据进行分析。不过如果我们面对的不是Oracle数据库,那么该用什么工具呢?前些时候我做了大量的搜索,居然没有找到一款能够完全媲美OSW的操作系统监控工具。功能最为相近的是nmon,如果仅仅是监控linux操作系统,那么nmon的能力接近于OSW。不过有一个十分致命的问题就是,当nmon做后台采集的时候,无法使用-D -d参数采集磁盘IO的详细情况,仅仅能采集到磁盘的busy%数据。对于早期的计算机系统而言,busy%可以反映出磁盘的繁忙程度,而对于现在的磁盘系统来说,100% busy并不一定意味着性能问题。而分析诊断数据库问题的时候,如果没有磁盘IO的详细信息,定位问题的效果就差了不少。

国产数据库的可观测性能力本身就偏弱,很多问题分析必须结合OS的监控数据,才能做的比较彻底,特别是需要做故障定位的时候,更是离不开OS的监控数据。我也希望国产数据库厂商能够自研一个OS性能监控数据的自动采集工具。不过目前我们还无法从国产数据库厂商处获得这样的工具。国产数据库服务器,也只能安装一套OSW才行啊,这也是我们给国产数据库用户提出的一个建议。

OSW(OSWatcher)是Oracle公司研发的一个免费软件,一个通用的操作系统性能监控工具,它可以用于监控任何支持的操作系统。作为一个ORACLE DBA,我在差不多二十年前就开始在性能优化项目中使用OSW。从Oracle 11.2.0.4开始,用户不需要自己下载安装OSW,因为它已经随着Oracle数据库自动安装在你的数据库服务器上了。我们习惯于在Oracle数据库服务器上用OSW来监控操作系统,不过实际上Oracle的免费使用许可证允许你在非Oracle数据库服务器上使用OSW来监控系统的性能,例如CPU利用率、内存使用情况、磁盘I/O等。Oracle公司的使用协议不会对使用OSW进行操作系统性能监控和分析的用户施加任何限制。OSW可以在任何操作系统上自由使用,并且可以免费下载和安装。

使用OSW来监控非Oracle数据库服务器的性能是完全合法和可行的,但是需要注意,您需要遵守操作系统和其他软件的许可协议和使用规定。

根据Oracle公司的使用协议,其他公司可以在其商业环境中使用OSW(OSWatcher)软件来监控操作系统性能,但需要遵守以下几个要求:

1、保留版权声明:必须在使用、分发或修改OSW软件时保留Oracle公司的版权声明。

2、不允许进行修改:不允许修改OSW的代码,除非获得Oracle公司的书面许可。

3、非独占使用权:不允许将OSW软件独占使用或分发给第三方,除非获得Oracle公司的书面许可。

4、免责声明:OSW软件是按“原样”提供的,没有任何明示或暗示的担保或条件。使用者必须自行承担风险。

从上面的使用协议声明可以看出,用户可以下载OSW工具,并安装在一台运行国产达梦数据库的服务器上,用于OS监控数据的采集,这是完全合法的。不过Oracle并不允许在未经授权的时候,第三方的软件中直接分发OSW,因此OSW无法随着D-SMART发行版或者数据库厂商的数据库产品分发。Nmon在这方面要比OSW宽泛,nmon允许随着第三方软件自由分发。

OSWatcher是一种跨平台的数据收集工具,可以用于监控和诊断Linux、UNIX和Windows操作系统。它可以收集系统资源使用情况的数据,例如CPU利用率、内存使用情况、网络使用情况等。这些数据可以帮助管理员分析系统性能问题,并作出优化和调整的决策。下面是OSW可以采集的一些更具体的指标信息:

lCPU 使用率:可以采集所有 CPU 核心的使用率,包括用户空间、内核空间、空闲等各个状态的使用率。

lCPU 负载:可以采集 CPU 负载的平均值以及每个 CPU 核心的负载情况。

l内存使用情况:可以采集内存总量、空闲内存、缓存和缓冲区、交换空间等各个方面的情况。

l磁盘 I/O 情况:可以采集每个设备的读写带宽、读写 IOPS、平均响应时间、读写字节数等各种指标信息。

l网络 I/O 情况:可以采集每个网络接口的带宽、数据包传输率、传输错误、丢包等情况。

l进程和线程信息:可以采集进程号、进程状态、虚拟内存使用量、RSS、CPU 和内存使用情况等各种信息。

l文件系统使用情况:可以采集文件系统容量、已用容量、可用容量、磁盘空间使用率等信息。

l资源利用率:可以采集系统各种资源的利用率,例如 CPU、内存、磁盘、网络等等。

l数据库性能:可以采集数据库的各种性能指标,例如会话数量、等待事件、I/O 性能等等。

OSW采集的信息十分丰富,包括网卡的信息、IOSTAT、meminfo、mpstat、netstat、进程信息、slabinfo、vmstat等信息。都是数据库系统出现故障时,OS层面容易出问题或者需要关注的方面。这是Oracle公司在售后服务中积累下来的经验。国产数据库厂商完全可以模仿这些内容开发一个工具。

OSW的默认采集周期是30秒钟,采集粒度对于大多数问题分析来说是足够的。OSW原汁原味的保留了OS相关采集命令输出的结果,对于事后分析十分有价值。

二十多年的优化生涯中多次因为用户安装了OSW而在黑暗的探索中找到了方向,因此我已经习惯了用OSW的数据而不是用不一定靠谱的推测去分析数据库异常与操作系统状态的关联性,有了这一块拼图,才让整个故障分析变得真正的无懈可击。希望有兴趣的朋友可以在非Oracle数据库上体验一下OSW,也建议国产数据库用户也在自己的服务器上装上一套OSW,没准什么时候就用得上呢。​

有关聊聊操作系统监控利器OSW的更多相关文章

  1. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  6. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  7. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  8. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  9. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  10. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

随机推荐