#性能

0 关注者 · 34 帖子

性能标签组用于发布有关软件性能问题以及解决和监视性能问题的最佳实践的文章。

文章 Jeff Liu · 十一月 6, 2025 4m read

动机

直到开始新工作,我才了解到ObjectScript。实际上,Objectscript并不是一种年轻的编程语言。与 C++、Java 和 Python 相比,它的社区并不活跃,但我们很想让这里更有活力,不是吗?

我注意到,有些同事在理解大型项目中的类关系时感到棘手。目前还没有易于使用的现代化类图工具适用于ObjectScript。

相关工作

我尝试过相关的工作:

——InterSystems 类视图:
1. https://github.com/intersystems-community/ClassExplorer
这个工具很棒,类图显示清晰美观。但存在Docker构建问题:“#0 0.512 exec ./irissession.sh: no such file or directory”。我猜这是为Studio设计的支持功能,而非VSCode。它似乎需要手动导入项目,且需要一定配置才能使用。

2. https://github.com/gjsjohnmurray/vscode-objectscript-class-view
这是另一个给我带来灵感的伟大作品。类结构清晰,不仅支持项目中的类,也支持库中的类。但看起来像是VSCode大纲的增强版。

——其他语言的 VSCode 类图表视图插件

0
0 11
文章 Nicky Zhu · 十月 28, 2025 9m read

技术文档 — Quarkus IRIS Monitor System

1. 目的与范围

此模块支持在基于 Quarkus 的 Java 应用程序与 InterSystems IRIS 的原生性能监控功能之间进行集成。
它使开发者可以通过 @PerfmonReport 对方法添加注释,这样可以在执行方法时自动触发 IRIS 的 ^PERFMON 例程,以生成性能报告,而无需人工干预。


2. 系统组件

2.1 注释:@PerfmonReport

  • 定义为 CDI InterceptorBinding
  • 可应用于方法或类。
  • 指示使用 IRIS 监控逻辑包装方法执行的框架。

2.2 拦截器:PerfmonReportInterceptor

  • 拦截对带注释的方法的调用。

  • 执行流程:

    1. 记录启动事件 (LOG.infof("INIT: …"))
    2. 调用 monitorSystem.startPerfmon()
    3. 继续执行 context.proceed()
    4. finally 块中:
      • 调用 monitorSystem.generateReportPerfmon(...)
      • 调用 monitorSystem.stopPerfmon()
      • 记录结束事件及执行时间
  • 确保即使抛出异常,监控也始终结束。

2.3 DAO Bean:MonitorSystem

  • 带有 @ApplicationScoped 注释的 CDI bean。

  • 保存启动时初始化的 IRIS 的单个实例。

  • 通过 @ConfigProperty 注入的配置(JDBC URL、用户、密码)。

  • 使用 DriverManager.getConnection(...) 获得原始 IRISConnection

  • 包含方法:

    • startPerfmon()
    • generateReportPerfmon(String reportName)
    • stopPerfmon()
  • 每一个都通过 iris.classMethodVoid(...) 调用 iris.src.dc.AdapterPerfmonProc 中合适的 ObjectScript 方法。

2.4 ObjectScript 适配器:iris.src.dc.AdapterPerfmonProc

  • 定义封装 ^PERFMON 逻辑的例程:

      Class iris.src.dc.AdapterPerfmonProc Extends %RegisteredObject
      {
          ClassMethod start() As %Status
          {
              Set namespace = $NAMESPACE
              zn "%SYS"
              set status = $$Stop^PERFMON()
              set status = $$Start^PERFMON()
              zn namespace
              return status
          }
    
          ClassMethod generateReport(nameReport As %String = "report.txt") As %Status
          {
              Set namespace = $NAMESPACE
              zn "%SYS"
              Set tempDirectory = ##class(%SYS.System).TempDirectory()
              set status = $$Report^PERFMON("R","R","P", tempDirectory_"/"_nameReport)
              zn namespace
    
              return status
          }
    
          ClassMethod stop() As %Status
          {
              Set namespace = $NAMESPACE
              zn "%SYS"
              Set status = $$Stop^PERFMON()
              zn namespace
    
              return status
          }
      }
    
  • 在命名空间 %SYS 中运行以访问 ^PERFMON 例程,然后返回到原始命名空间。


3. 执行流程

  1. 一个请求进入 Quarkus 应用程序。

  2. CDI 拦截器检测 @PerfmonReport 注释并拦截方法调用。

  3. monitorSystem.startPerfmon() is invoked, triggering IRIS ^PERFMON monitoring.

  4. 业务方法正常执行(数据访问、转换、逻辑等)。

  5. 在方法返回或抛出异常后,拦截器确保:

    • 调用 monitorSystem.generateReportPerfmon(...) 以创建 .txt 性能报告。
    • 执行 monitorSystem.stopPerfmon() 以停止监控会话。
    • 使用 Logger.infof(...) 记录 Java 端的总执行时间。
  6. 生成的报告文件存储在 IRIS 临时目录中,通常为:/usr/irissys/mgr/Temp/

    • 文件名遵循以下模式: <ClassName><MethodName><timestamp>.txt

4. 技术挑战和解决方案

挑战解决方案
在使用池化 JDBC 连接时出现 ClassCastException使用 DriverManager.getConnection(...) 获得原生 IRISConnection 而非池化 ConnectionWrapper
反复打开连接产生的开销@ApplicationScoped bean 中维护单个 IRIS 实例,通过 @PostConstruct 初始化。
确保即使在出现异常时 ^PERFMON 也始终停止在拦截器中使用 try-finally 来调用 stopPerfmon()generateReportPerfmon()
配置可移植性使用 @ConfigPropertyapplication.properties 注入连接设置(jdbc.urlusernamepassword
管理并发监控会话避免对高度并发的端点添加注释。 以后的版本可能会实现会话级隔离。

5. 用例和优势

  • 可以从 Java 代码实时查看 IRIS 运行时活动。
  • 为开发者简化了性能分析查询优化工作。
  • 基准测试分析系统回归测试很有用。
  • 可以作为关键操作的轻量级性能审核跟踪

6. 实际使用示例

请在以下位置查看完整的源代码和部署设置:


6.1 概述

该应用程序运行一个 Quarkus 服务器,后者连接到使用 FHIRSERVER 命名空间配置的 InterSystems IRIS 实例
ORM 层使用带 PanacheRepository 的 Hibernate ORM 实现,允许在 Java 实体与 IRIS 数据库类之间直接映射。

当应用程序(通过 docker-compose up)启动时,它会打开:

  • IRIS 容器,托管 FHIR 数据模型和 ObjectScript 例程(包括 AdapterPerfmonProc);
  • Quarkus 容器,公开 REST 端点并通过原生 JDBC 驱动程序连接到 IRIS。

6.2 REST 端点

REST 资源会公开一个简单的端点来检索患者信息:

@Path("/patient")
public class PatientResource {

    @Inject
    PatientService patientService;

    @GET
    @Path("/info")
    @Produces(MediaType.APPLICATION_JSON)
    public PatientInfoDTO searchPatientInfo(@QueryParam("key") String key) {
        return patientService.patientGetInfo(key);
    }
}

此端点接受一个查询参数(密钥),该参数标识了 FHIR 数据仓库中的患者资源。


### 6.3 带有 @PerfmonReport 的服务层

PatientService 类包含用于检索和撰写患者信息的业务逻辑。 它带有 @PerfmonReport 注释,这意味着对 /pantion/info 的每个请求都会触发 IRIS 性能监控:

@ApplicationScoped
public class PatientService {

    @Inject
    PatientRepository patientRepository;

    @PerfmonReport
    public PatientInfoDTO patientGetInfo(String patientKey) {

        Optional<Patient> patientOpt = patientRepository.find("key", patientKey).firstResultOptional();
        Patient patient = patientOpt.orElseThrow(() -> new IllegalArgumentException("Patient not found"));

        PatientInfoDTO dto = new PatientInfoDTO();
        dto.setKey(patient.key);
        dto.setName(patient.name);
        dto.setAddress(patient.address);
        dto.setBirthDate(patient.birthDate != null ? patient.birthDate.toString() : null);
        dto.setGender(patient.gender);
        dto.setMedications(patientRepository.findMedicationTextByPatient(patientKey));
        dto.setConditions(patientRepository.findConditionsByPatient(patientKey));
        dto.setAllergies(patientRepository.findAllergyByPatient(patientKey));

        return dto;
    }
}

6.4 执行流程

GET /patient/info?key=Patient/4 提出请求

Quarkus 将请求路由到 PatientResource.searchPatientInfo()

CDI 拦截器在 PatientService.patientGetInfo() 中检测 @PerfmonReport 注释。

在执行服务逻辑前:

  • 拦截器调用 MonitorSystem.startPerfmon(),这会调用 IRIS 类 iris.src.dc.AdapterPerfmonProc.start()

  • 方法执行业务逻辑,使用 Hibernate PanacheRepository 映射查询患者数据。

在方法完成后:

  • 调用 MonitorSystem.generateReportPerfmon() 以创建性能报告。

  • MonitorSystem.stopPerfmon() 停止 IRIS 性能监视器。

usr/irissys/mgr/Temp/ 下生成一个 .txt 报告

示例文件名:PatientService_patientGetInfo_20251005_161906.txt

6.5 结果

生成的报告包含详细的 IRIS 运行时统计信息,例如:

                         Routine Activity by Routine

Started: 10/11/2025 05:07:30PM                    Collected: 10/11/2025 05:07:31PM

Routine Name                        RtnLines  % Lines   RtnLoads  RtnFetch  Line/Load Directory
----------------------------------- --------- --------- --------- --------- --------- ---------
Other                                     0.0       0.0       0.0       0.0         0
PERFMON                                  44.0       0.0       0.0       0.0         0 /usr/irissys/mgr/
%occLibrary                         3415047.0      34.1   48278.0       0.0      70.7 /usr/irissys/mgr/irislib/
iris.src.dc.AdapterPerfmonProc.1          7.0       0.0       2.0       0.0       3.5 /usr/irissys/mgr/FHIRSERVER/
%occName                            5079994.0      50.7       0.0       0.0         0 /usr/irissys/mgr/irislib/
%apiDDL2                            1078497.0      10.8   63358.0       0.0      17.0 /usr/irissys/mgr/irislib/
%SQL.FeatureGetter.1                 446710.0       4.5   66939.0       0.0       6.7 /usr/irissys/mgr/irislib/
%SYS.WorkQueueMgr                       365.0       0.0       1.0       0.0     365.0 /usr/irissys/mgr/
%CSP.Daemon.1                            16.0       0.0       1.0       0.0      16.0 /usr/irissys/mgr/irislib/
%SYS.TokenAuth.1                         14.0       0.0       5.0       0.0       2.8 /usr/irissys/mgr/
%Library.PosixTime.1                      2.0       0.0       0.0       0.0         0 /usr/irissys/mgr/irislib/
%SYS.sqlcq.uEXTg3QR7a7I7Osf9e8Bz...      52.0       0.0       1.0       0.0      52.0 /usr/irissys/mgr/
%SYS.SQLSRV                              16.0       0.0       0.0       0.0         0 /usr/irissys/mgr/
%apiOBJ                                 756.0       0.0       0.0       0.0         0 /usr/irissys/mgr/irislib/
FT.Collector.1                            0.0       0.0       0.0       0.0         0 /usr/irissys/mgr/
SYS.Monitor.FeatureTrackerSensor.1        0.0       0.0       0.0       0.0         0 /usr/irissys/mgr/
%SYS.Monitor.Control.1                    0.0       0.0       0.0       0.0         0 /usr/irissys/mgr/
%SYS.DBSRV.1                            252.0       0.0       4.0       0.0      63.0 /usr/irissys/mgr/
%sqlcq.FHIRSERVER.cls12.1                19.0       0.0       0.0       0.0         0 /usr/irissys/mgr/irislocaldata/
%sqlcq.FHIRSERVER.cls13.1                74.0       0.0       0.0       0.0         0 /usr/irissys/mgr/irislocaldata/
%sqlcq.FHIRSERVER.cls14.1                74.0       0.0       0.0       0.0         0 /usr/irissys/mgr/irislocaldata/
%sqlcq.FHIRSERVER.cls15.1                52.0       0.0       0.0       0.0         0 /usr/irissys/mgr/irislocaldata/
%SYS.System.1                             1.0       0.0       0.0       0.0         0 /usr/irissys/mgr/

通过这些数据,可以精确了解 IRIS 在 REST 调用期间内部执行了哪些例程 — 包括 SQL 编译、执行和 FHIR 数据访问。

洞察%sqlcq.FHIRSERVER.* 例程会捕获 Quarkus 在该方法中执行的所有 SQL 缓存查询。 监控这些例程可以让开发者分析查询执行情况、了解代码行为并发现潜在的性能瓶颈。 这使它们成为开发和调试 FHIR 相关操作的强大工具。

image

6.6 总结

此示例演示了标准 Quarkus 服务如何使用 @PerfmonReport 注释以透明的方式利用 IRIS 原生监控工具。 它结合了:

  • CDI 拦截器 (Quarkus)

  • Hibernate PanacheRepositories (ORM)

  • IRIS 原生 ObjectScript 例程 (^PERFMON)

结果是产生了一种完全自动化、可重现的性能分析机制,这种机制可以应用于应用程序中的任何服务方法。

0
0 11
文章 Michael Lei · 五月 12, 2021 11m read

InterSystems 数据平台和性能 - 第 5 部分 使用 SNMP 进行监控

在之前的帖子中,我展示了如何使用 pButtons 收集历史性能指标。 我首选 pButtons 是因为我知道它随每个数据平台实例(Ensemble、Caché、...)一起安装。 不过,还有其他方法可以实时收集、处理和显示 Caché 性能指标,以进行简单的监视,或进行更重要的并且复杂得多的运营分析和容量计划。 最常见的数据收集方法之一是使用 SNMP(简单网络管理协议)。

SNMP 是 Caché 向各种管理工具提供管理和监控信息的标准方式。 Caché 在线文档包含了 Caché 和 SNMP 之间接口的详细信息。 虽然 SNMP 应该可以直接与 Caché 配合工作,但仍有一些配置技巧和陷阱。 我经历了很多次错误的开始,并且在 InterSystems 其他同事的帮助下,才让 Caché 与操作系统 SNMP 主代理建立对话,所以我写了这篇帖子,希望您可以避免同样的痛苦。

在本帖中,我将介绍如何为 Red Hat Linux 上的 Caché 设置和配置 SNMP,您应该能够对其他 *nix 版本使用相同步骤。 我使用 Red Hat 写这篇文章是因为在 Linux 上进行设置更棘手一些;在 Windows 上,Caché 会自动安装一个 DLL 来与标准 Windows SNMP 服务连接,所以应该更容易配置。

3
2 456
InterSystems 官方 Michael Lei · 十月 7, 2024

我们最近在向量搜索抢险体验计划中提供了新版的 InterSystems IRIS,新版本采用了新的基于分层可导航小世界 (HNSW) 索引算法的近似最近邻索引。 这一新增功能可对大型向量数据集进行高效的近似最近邻搜索,从而显著提高查询性能和可扩缩性。

HNSW 算法旨在通过构建基于图形的结构来优化高维数据的向量搜索,从而更快地在大型向量集合中找到近似邻。 无论您使用的是推荐系统、自然语言处理,还是其他机器学习应用,HNSW 都能显著缩短搜索时间,同时允许您调整准确度水平,但准确度提高的代价是查询时间变慢。

HNSW 的主要优点包括:

    •    即使数据集规模不断扩大,也能加快搜索速度
    •    减少内存占用,同时保持高准确度
    •    与现有的 IRIS 向量搜索功能无缝集成

如何开始使用

最新版本现已通过向量搜索抢先体验计划提供。 要参与,请在此处注册,下载新版本并开始测试。 我们正在持续增强向量搜索的功能,因此您的反馈至关重要!

我们鼓励您探索性能改进方法,并与社区分享您的想法。 如果您在抢先体验阶段遇到任何问题或有任何反馈,请联系我。

祝您编码愉快!

0
0 83
公告 Claire Zheng · 一月 28, 2024

近日,InterSystems宣布 InterSystems IRIS® Cloud SQL 和 InterSystems IRIS® Cloud IntegratedML® 服务全面上市。 这些全面托管的云原生智能数据服务使开发人员能够轻松地在SQL环境中构建云原生数据库和机器学习(ML)应用程序。

通过 Cloud SQL和 Cloud IntegratedML,开发人员可以访问下一代关系数据库即服务(DBaaS),DBaaS快速且易于配置和使用。 嵌入式AutoML功能支持开发人员在全面托管的、弹性的云原生环境中,仅仅通过几条类似SQL的命令即可轻松开发并执行机器学习模型。

0
0 105
文章 Yuxiang Niu · 十一月 12, 2023 3m read

在日常Cache运维过程中可能会由于数据或者程序等原因造成锁的异常增长,导致数据库性能受到影响会出现程序报错或卡顿无法正常运行的问题。遇到此类问题需查看数据库当前锁列表情况,找到出现次数最多关键锁,根据关键锁对应的进程来判断处理。总结有以下三种方式查看关键锁。

  1. 可在portal[Locks]中查看;
  2. 可在terminal端的%sys下使用Do ^LOCKTAB命令下查看;
  3. 通过自定义程序查看。

查看方式

优点

缺点

第一种

易操作、方式简便

慢、锁数量太多无法显示

第二种

快、不受网页限制

易忘、需要输入准确命令

第三种

快、灵活、直接显示关键锁信息

需定位准确命名空间

下面给出自定义程序实例,程序逻辑为按命名空间循环所有锁信息,通过计数器方式记录所有锁当中出现次数最多的一个,输出其信息。入参为数据库中不同命名空间,输出结果为锁名称及锁的所有者,所有者一般为进程IDECP

2
0 202
文章 Michael Lei · 十月 27, 2022 1m read

WinterCorp 性能测试报告摘要

  • InterSystems的性能测试方法用来衡量 "许多运行状态下数据库应用的关键构件 "是有效的。
  • 与AWS Aurora MySQL、MariaDB、Microsoft SQL Server、Oracle和PostgreSQL相比,InterSystems IRIS显示出 "巨大的性能优势"。
  • InterSystems IRIS的插入速度是其他系统的1.7到9倍。InterSystems IRIS的数据速率是1.1到600倍。在插入率和查询率的组合上,没有其他系统在性能上能接近于InterSystems IRIS。
  • InterSystems IRIS的效率是AWS Aurora MySQL的2.7到3.1倍,而且随着集群中节点数量的增加,效率优势也越来越大。
  • 在整个三到五分钟的集群测试中,InterSystems IRIS插入的记录在插入后很快出现在查询中。

图1. 每vCPU每秒查询对比(InterSystems IRIS vs AWS Aurora MySQL,1-4 查询节点)

图2. 单节点插入/查询速度对比(InterSystems IRIS vs AWS Aurora MySQL vs MS SQL Server)

0
0 142
文章 Weiwei Gu · 六月 27, 2022 6m read

Globals,这些存储数据的魔剑,已经存在了一段时间,但是没有多少人能够有效地使用它们,也没有多少人知道这个超级武器。

如果你把Globals的东西用在它们真正能发挥作用的地方,其结果可能是惊人的,要么是性能的提高,要么是整体解决方案的大幅简化 (1, 2).

Globals提供了一种特殊的存储和处理数据的方式,它与SQL表完全不同。它们在1966年首次出现在 M(UMPS)编程语言中, 该语言最初用于医学数据库。现在它仍然以同样的方式被使用,但也被其他一些以可靠性和高性能为首要任务的行业所采用:金融、交易等。

后来M(UMPS)演变为 Caché ObjectScript (COS). COS是由InterSystems公司开发的,作为M的一个超集. 其原始语言仍然被开发者社区所接受,并在一些实现中保持活力。在网络上有几个活跃的网址,比如:MUMPS Google group, Mumps User's group), effective ISO Standard等等

现代基于Globals的数据库支持交易、日志、复制、分区等。这意味着它们可以被用来构建现代的、可靠的、快速的分布式系统。

Gloabls并不将你限制于关系模型的范围内。它们让你可以自由地创建为特定任务优化的数据结构。对于许多应用来说,合理地使用好的Globals就如一颗真正的银子弹头,它所提供的速度是传统关系型应用的开发者所梦寐以求的。

作为一种存储数据的方法,globals可以在许多现代编程语言中使用,包括高级和低级语言。因此,本文将特别关注Globals本身,而不是它们曾经来自的语言。

1
1 323
文章 Michael Lei · 六月 11, 2022 2m read

在检查我们的^pButtons(在IRIS中改名为^SystemPerformance)性能监控工具的文档时,一位客户告诉我。"我理解所有内容,但我希望它能更简单......更容易定义配置文件,管理它们等等"。

在这次会议之后,我认为尝试为其提供一些更简单的人机界面是一个不错的试验。

这方面的第一步是在现有的pButtons例程上包裹一个基于类的API。

我还能够添加一些更多的 "功能",比如显示当前正在运行的配置文件,它们剩余的运行时间,以前运行的进程等等。

下一步是在这个API的基础上添加一个REST API类。

有了这个工件(pButtons REST API),人们就可以在上面建立一个比较时髦的用户界面。

举个🌰: -

0
0 194
文章 Lele Yang · 一月 30, 2022 2m read

Linux内核机制OOM Killer,也即Out of Memory Killer, 顾名思义,该机制的主要职能就是当内存不足时,选择并杀掉一些进程,以使系统继续运行。

Caché/Ensemble/IRIS的多个客户曾经遇到过与此相关的系统宕机,宕机的直接原因是数据库核心写进程Write Daemon被OOM Killer选中并杀掉了,在我们的日志文件中可以看到如下信息,

06/15/21-10:50:31:035 (13579) 3 Daemon WRTDMN (pid 13588) died. Freezing system
06/15/21-10:52:25:940 (13601) 2 System Process 'WRTDMN' terminated abnormally (pid 13588)

与之对应,在操作系统的日志文件中可以看到如下记录,

0
0 811
问题 peng lv · 九月 7, 2021

本地库 在打开studio、studio编译类、关闭studio等操作系统卡死,关闭后连接超时。

打开cconsole.log报错日志,提示***严重的磁盘读写错误,I/O错误***,对数据库做了一致性检查,也未发现错误,必须重启电脑或者force库后恢复使用。

请问是什么问题造成的。。。 

  

1
0 327
文章 Michael Lei · 八月 26, 2021 9m read

SAM - 设置和添加非 IRIS 目标指标的技巧和提示

SAM(系统警报和监视)以“功能齐全”的 docker-compose 容器集的形式提供,只要启动就可以开始以默认的仪表板监视 IRIS 实例。 使用初始配置就可以很好地了解 SAM 功能并开始对 IRIS 系统进行基本监视。 但是,当开始监视多个系统并收集大量指标数据时,需要更改一些默认设置。 为了从 SAM 获取更多价值,您还会想要添加来自其他数据源(目标)的指标。 以下技巧将帮助您在生产环境中部署 SAM,从多个目标收集指标并将这些指标组合到您自己的仪表板和图表中。 此外,您还将看到一些可能有助于探索 SAM 容器和应用程序的命令。

*注意:*我应该指出,其中一些技巧和提示可能不是最佳做法;这更像是一个日志,记录了我第一次如何配置 SAM 来监视相同系统上的多个服务器和非 IRIS 目标的基准。 如果您有建议,请在评论中指教 ;) 所以,记住本帖可能会随着时间的推移而有所变化,让我们开始吧;


在下面的技巧中,有重启 docker 以及启动和停止 SAM 的操作。 请通读这些技巧,确定哪些适合您,然后按照下面的相同顺序执行。

1. 确保有足够的空间用于 SAM 数据库

默认情况下,docker 容器将文件存储在根 (/) 文件系统。 SAM 不需要很多 CPU 或内存资源;但是,指标收集将占用空间。

指标需要的存储容量“视情况而定”。 虽然在开始监视之前可能无法明确数据库大小,但大致上,在抓取周期为 15 秒的情况下,监视 10 个 IRIS 虚拟机以及操作系统指标大约消耗 50GB 存储。

策略包括:增加监视实例的根存储,或更改数据库的卷位置。 我使用了以下命令来更改运行 docker 的虚拟机上的 docker 目录。 也许是杀鸡用了牛刀,但很管用。

  • 停止 docker 并将 docker 文件复制到空间充足的文件系统(本例中为 /data/docker/data)。 见下面的示例:
[root@mysamserver lib]# sudo systemctl stop docker  
[root@mysamserver lib]# pwd  
/var/lib  
[root@mysamserver lib]# cp -rp docker /data/docker/data  
[root@mysamserver lib]#  
[root@mysamserver lib]# rm -rf docker
  • 在 docker 配置文件中更新卷路径。 注意此文件还有一个网络设置“bip”(请参见注释:...)
cat /etc/docker/daemon.json

    {
            "data-root": "/data/docker/data",
            "bip": "192.168.0.1/24"
    }
  • 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker

systemctl status docker.service

2. 设置 SAM

我假定您已在测试系统上设置 SAM,并熟悉它的基本操作:添加集群和实例,以及查看系统指标。 建议您花 20 分钟时间查看我在虚拟全球峰会 2020 上的展示,以了解安装步骤的概述,以及添加多个目标的运行指标时 SAM 的外观。 要观看此会议,请使用以下链接(您需要使用您的电子邮件注册):

DEV007 系统警报和监视

登录到 SAM 门户并配置一些 IRIS 实例。 这会填充配置文件并提供向导。

http://mysamserver:8080/api/sam/app/index.csp#/

注意:如果要添加多个实例,或者希望用脚本执行此步骤,可以通过 API 添加实例。 请参见文档。

3. 升级到生产许可证

SAM 随附了一个 IRIS 社区版许可证。 有几个限制,包括 IRIS.DAT 限制为 10GB。 10GB 不足以长时间从多个目标收集数据。 请联系您的 InterSystems 联系人以获取生产许可证。 在没有编辑器的情况下,在精简的容器中更新许可证可能很棘手,我只是在 IRIS 容器上登录一个交互式会话,然后使用以下命令更新许可证密钥:

  • 打开 shell,切换目录至 mgr 文件夹(iris.key 文件的默认位置)
docker exec -it sam_iris_1 bash
cd /dur/iconfig/mgr
  • 使用 unix“here 文档”更新密钥。 在“>”后面粘贴密钥文本。 在密钥文本后面,输入“>EOF”以提交命令。 然后输入“exit”退出 shell。
cat <<EOF >iris.key
>
[ConfigFile]
FileType=InterSystems License Rev-A.1
LicenseID=999999

[License]
LicenseCapacity=InterSystems IRIS 2020.2 Server for SAM:etc etc, the key you were sent by your InterSystems contact.
>EOF
exit
  • 然后使用提供的 docker-compose shell 脚本停止再启动 SAM:
./stop.sh
./start.sh
  • 可以通过访问系统管理门户或登录到 iris 实例并检查 messages.log 来检查许可证是否一切正常。
docker exec -it sam_iris_1 bash
cd /dur/iconfig/mgr
cat messages.log

4. 在目标上安装其他 prometheus 导出程序

例如,prometheus 节点导出程序可显示各种硬件和内核相关的指标。

节点导出程序文档

通过请求(抓取)实例端点的指标,测试节点导出程序是否正常工作:

curl my_target_server_name:9100/metrics

您应该看到类似下面的信息:

mylaptop:~ mo$ my_target_server_name:9100/metrics | more
HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 4.8862e-05
go_gc_duration_seconds{quantile="0.25"} 7.5898e-05
go_gc_duration_seconds{quantile="0.5"} 9.2974e-05
go_gc_duration_seconds{quantile="0.75"} 0.000130664
go_gc_duration_seconds{quantile="1"} 0.000358762
go_gc_duration_seconds_sum 303.291715258
go_gc_duration_seconds_count 2.572586e+06
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 9
:
: many many metrics will be displayed

注意您可以对您的 IRIS 实例执行同样操作:

mylaptop:~ mo$ curl my_target_server_name:52776/api/monitor/metrics | more
iris_cpu_pct{id="AUXWD"} 0
iris_cpu_pct{id="CSPDMN"} 0
iris_cpu_pct{id="CSPSRV"} 0
iris_cpu_pct{id="ECPCliR"} 0
iris_cpu_pct{id="ECPCliW"} 0
iris_cpu_pct{id="ECPSrvR"} 0
iris_cpu_pct{id="ECPSrvW"} 0
:
: many many metrics will be displayed

5. 编辑配置文件以添加对新目标的抓取

例如,前一个技巧中的 node-exporter 实例。 配置文件将位于 SAM 的安装位置。 如下所示,可以看到 grafana 和 prometheus yml 配置文件。

[root@mysamserver sam-1.0.0.115-unix]# ls
config  docker-compose.yml  readme.txt  start.sh  stop.sh
[root@mysamserver sam-1.0.0.115-unix]# tree -x config
config
├── alertmanager
│   └── isc_alertmanager.yml
├── grafana
│   ├── dashboard.json
│   ├── dashboard-provider.yml
│   ├── datasource.yml
│   └── grafana.ini
├── nginx
│   └── nginx.conf
└── prometheus
    ├── isc_alert_rules.yml
    └── isc_prometheus.yml

4 directories, 8 files

5.1 添加目标到 prometheus

以下示例是使用 SAM 中的配置 GUI 屏幕创建的 isc_prometheus.yml 文件。 该文件包含两个集群。 一个集群监视 sam 实例本身,另一个集群监视五个 IRIS 实例。

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
global:
  evaluation_interval: 15s
  scrape_interval: 15s
remote_read:
- url: http://iris:52773/api/sam/private/db/read
remote_write:
- url: http://iris:52773/api/sam/private/db/write
rule_files:
- ./isc_alert_rules.yml
scrape_configs:
- job_name: SAM
  metrics_path: /api/monitor/metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "1"
    targets:
    - mysaminstance.mycompany.com:8080
  - labels:
      cluster: "2"
    targets:
    - myiristarget1:52776
    - myiristarget2:52776
    - myiristarget3:52776
    - myiristarget4:52776
    - myiristarget5:52776
  • 要添加对其他运行 node-exporter 的目标的抓取,请将以下内容添加到 isc_prometheus.yml 文件的底部。 注意 API metrics_path 与 IRIS 不同。
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
global:
  evaluation_interval: 15s
  scrape_interval: 15s
remote_read:
- url: http://iris:52773/api/sam/private/db/read
remote_write:
- url: http://iris:52773/api/sam/private/db/write
rule_files:
- ./isc_alert_rules.yml
scrape_configs:
- job_name: SAM
  metrics_path: /api/monitor/metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "1"
    targets:
    - iscsydsam.iscinternal.com:8080
  - labels:
      cluster: "2"
    targets:
    - myiristarget1:52776
    - myiristarget2:52776
    - myiristarget3:52776
    - myiristarget4:52776
    - myiristarget5:52776
- job_name: node_shard1
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget1:9100
- job_name: node_shard2
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget2:9100
- job_name: node_shard3
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget3:9100
- job_name: node_shard4
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget4:9100
- job_name: node_shard5
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget5:9100
  • 然后使用提供的 docker-compose shell 脚本停止再启动 SAM:
./stop.sh
./start.sh

SAM 现在从您通过 GUI 添加的 IRIS 实例以及相同实例上的 node-exporter 中收集指标。

6. 增加 Prometheus 收集指标的天数

在 SAM 的第一版中,您可以在 GUI 中更改收集指标的天数。 但是,我在显示所有指标时遇到一个问题。 在我弄清楚发生了什么之前,我更改了 Prometheus 中的保留天数,否则 SAM 将收集数据,但是您在 Grafana 的 Prometheus 查询中看不到指标。

在文件 docker-compose.yml 中用来安装 SAM 的层,更改 Prometheus 启动时设置的保留天数,例如在 prometheus 部分中,更新 storage.tsdb.retention.time 参数以匹配所需的保留天数:

prometheus:
    command:
      - --web.enable-lifecycle
      - --config.file=/config/isc_prometheus.yml
      - --storage.tsdb.retention.time=30d

注意:在 SAM 的第一版中,最长保留天数为 30 天。 然后使用提供的 docker-compose shell 脚本停止再启动 SAM:

./stop.sh
./start.sh

7. 创建您自己的仪表板

您可以向现有仪表板添加面板,也可以创建新的仪表板以满足您的监视需求。 这是一个很大的主题,所以留到下一个帖子再说。 不过,这里先帮助您上手。

在 SAM 屏幕上使用 View in Grafana(在 Grafana 中查看)按钮切换到 Grafana。

DraggedImage.png

打开 Grafana 后,可以创建或编辑仪表板;

DraggedImage-1.png

网上有许多查询导出程序(如 node-exporter)的示例。

当可以显示 IRIS 系统指标(SAM 中的默认设置)、IRIS 应用程序指标(您需要将这些指标构建到应用程序中)以及其他指标(如 node-exporter 或由供应商创建的任何数量的指标)时,真正强大的功能才体现出来。 例如,使用 SAM 和 cAdvisor 监视 Docker 容器

0
0 224
文章 Michael Lei · 七月 27, 2021 8m read

以下步骤展示如何显示 /api/monitor 服务提供的指标列表示例。

在上个帖子中,我概述了以 Prometheus 格式显示 IRIS 指标的服务。 该贴介绍了如何在容器中设置和运行 IRIS 预览版 2019.4,然后列出了指标。


本帖假定您已安装 Docker。 如果未安装,现在就为您的平台安装吧 :)


步骤 1. 下载并运行 docker 形式的 IRIS 预览版

按照预览发行版的下载说明下载预览版许可证密钥IRIS Docker 映像。 例如,我选择了 InterSystems IRIS for Health 2019.4

按照 Docker 容器中的 InterSystems 产品初见中的说明操作。 如果您熟悉容器,请跳转到标题为“下载 InterSystems IRIS Docker 映像”的部分。

以下终端输出说明了我用来加载 docker 映像的过程。 docker load 命令可能需要几分钟的时间才能运行;

$ pwd
/Users/myhome/Downloads/iris_2019.4

$ ls
InterSystems IRIS for Health (Container)_2019.4.0_Docker(Ubuntu)_12-31-2019.ISCkey  irishealth-2019.4.0.379.0-docker.tar

$ docker load -i irishealth-2019.4.0.379.0-docker.tar
762d8e1a6054: Loading layer [==================================================>]  91.39MB/91.39MB
e45cfbc98a50: Loading layer [==================================================>]  15.87kB/15.87kB
d60e01b37e74: Loading layer [==================================================>]  12.29kB/12.29kB
b57c79f4a9f3: Loading layer [==================================================>]  3.072kB/3.072kB
b11f1f11664d: Loading layer [==================================================>]  73.73MB/73.73MB
22202f62822e: Loading layer [==================================================>]  2.656GB/2.656GB
50457c8fa41f: Loading layer [==================================================>]   14.5MB/14.5MB
bc4f7221d76a: Loading layer [==================================================>]  2.048kB/2.048kB
4db3eda3ff8f: Loading layer [==================================================>]  1.491MB/1.491MB
Loaded image: intersystems/irishealth:2019.4.0.379.0

$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
intersystems/irishealth   2019.4.0.379.0      975a976ad1f4        3 weeks ago         2.83GB

为简单起见,将密钥文件复制将用于持久性存储的文件夹位置,并重命名为 iris.key

$ mkdir -p /Users/myhome/iris/20194
$ cp 'InterSystems IRIS for Health (Container)_2019.4.0_Docker(Ubuntu)_12-31-2019.ISCkey' /Users/myhome/iris/20194/iris.key

$ cd /Users/myhome/iris/20194
$ ls
iris.key

使用为持久性存储创建的文件夹启动 IRIS;

$  docker run --name iris --init --detach --publish 52773:52773 --volume `pwd`:/external intersystems/irishealth:2019.4.0.379.0 --key /external/iris.key

$ docker ps -a
CONTAINER ID        IMAGE                                    COMMAND                  CREATED              STATUS                        PORTS                      NAMES
009e52c121f0        intersystems/irishealth:2019.4.0.379.0   "/iris-main --key /e…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:52773->52773/tcp   iris

很好! 您现在可以连接到正在运行的容器上的系统管理门户。 我使用的登录名/密码是 SuperUser/SYS;您第一次登录时会被提示更改密码。

导航到 Web 应用程序。 System > Security Management > Web Applications

您将看到一个 Web 应用程序:/api/monitor,这是用于显示 IRIS 指标的服务。

您无需执行任何操作即可返回指标,它直接可用。


步骤 2. 预览指标

在以后的帖子中,我们将使用 Prometheus 或 SAM _抓取_此端点,以设置的间隔收集指标。 但现在,让我们看一下为此实例返回的指标的完整列表。 例如,在 Linux 和 OSX 上,一个简单的方法是使用 curl 命令发出一个 HTTP GET。 例如,在我的(几乎不活动的)容器上,列表的开头为:

$ curl localhost:52773/api/monitor/metrics
:
:
iris_cpu_usage 0
iris_csp_activity{id="127.0.0.1:52773"} 56
iris_csp_actual_connections{id="127.0.0.1:52773"} 8
iris_csp_gateway_latency{id="127.0.0.1:52773"} .588
iris_csp_in_use_connections{id="127.0.0.1:52773"} 1
iris_csp_private_connections{id="127.0.0.1:52773"} 0
iris_csp_sessions 1
iris_cache_efficiency 35.565
:
:
等等。 在生产系统上,该列表可能非常长。  我在帖子末尾转储了完整列表。

另一个实用方法是使用 Postman 应用程序,但还有其他方法。 假定您已安装适合您的平台的 Postman,则可以发出 HTTP GET 并查看返回的指标。

总结

暂时就这么多内容。 在下个帖子中,我将从收集 Prometheus 中的数据开始,并查看一个 Grafana 仪表板示例。

预览容器中的完整列表

生产系统将提供更多指标。 从一些标签中可以看出,例如 {id="IRISLOCALDATA"} ,有一些指标与数据库有关,或者按进程类型对应于 CPU {id="CSPDMN"}

iris_cpu_pct{id="CSPDMN"} 0
iris_cpu_pct{id="CSPSRV"} 0
iris_cpu_pct{id="ECPWorker"} 0
iris_cpu_pct{id="GARCOL"} 0
iris_cpu_pct{id="JRNDMN"} 0
iris_cpu_pct{id="LICENSESRV"} 0
iris_cpu_pct{id="WDSLAVE"} 0
iris_cpu_pct{id="WRTDMN"} 0
iris_cpu_usage 0
iris_csp_activity{id="127.0.0.1:52773"} 57
iris_csp_actual_connections{id="127.0.0.1:52773"} 8
iris_csp_gateway_latency{id="127.0.0.1:52773"} .574
iris_csp_in_use_connections{id="127.0.0.1:52773"} 1
iris_csp_private_connections{id="127.0.0.1:52773"} 0
iris_csp_sessions 1
iris_cache_efficiency 35.850
iris_db_expansion_size_mb{id="ENSLIB"} 0
iris_db_expansion_size_mb{id="HSCUSTOM"} 0
iris_db_expansion_size_mb{id="HSLIB"} 0
iris_db_expansion_size_mb{id="HSSYS"} 0
iris_db_expansion_size_mb{id="IRISAUDIT"} 0
iris_db_expansion_size_mb{id="IRISLOCALDATA"} 0
iris_db_expansion_size_mb{id="IRISSYS"} 0
iris_db_expansion_size_mb{id="IRISTEMP"} 0
iris_db_free_space{id="ENSLIB"} .055
iris_db_free_space{id="HSCUSTOM"} 2.3
iris_db_free_space{id="HSLIB"} 113
iris_db_free_space{id="HSSYS"} 9.2
iris_db_free_space{id="IRISAUDIT"} .094
iris_db_free_space{id="IRISLOCALDATA"} .34
iris_db_free_space{id="IRISSYS"} 6.2
iris_db_free_space{id="IRISTEMP"} 20
iris_db_latency{id="ENSLIB"} 0.030
iris_db_latency{id="HSCUSTOM"} 0.146
iris_db_latency{id="HSLIB"} 0.027
iris_db_latency{id="HSSYS"} 0.018
iris_db_latency{id="IRISAUDIT"} 0.017
iris_db_latency{id="IRISSYS"} 0.020
iris_db_latency{id="IRISTEMP"} 0.021
iris_db_max_size_mb{id="ENSLIB"} 0
iris_db_max_size_mb{id="HSCUSTOM"} 0
iris_db_max_size_mb{id="HSLIB"} 0
iris_db_max_size_mb{id="HSSYS"} 0
iris_db_max_size_mb{id="IRISAUDIT"} 0
iris_db_max_size_mb{id="IRISLOCALDATA"} 0
iris_db_max_size_mb{id="IRISSYS"} 0
iris_db_max_size_mb{id="IRISTEMP"} 0
iris_db_size_mb{id="HSLIB",dir="/usr/irissys/mgr/hslib/"} 1321
iris_db_size_mb{id="HSSYS",dir="/usr/irissys/mgr/hssys/"} 21
iris_db_size_mb{id="ENSLIB",dir="/usr/irissys/mgr/enslib/"} 209
iris_db_size_mb{id="IRISSYS",dir="/usr/irissys/mgr/"} 113
iris_db_size_mb{id="HSCUSTOM",dir="/usr/irissys/mgr/HSCUSTOM/"} 11
iris_db_size_mb{id="IRISTEMP",dir="/usr/irissys/mgr/iristemp/"} 21
iris_db_size_mb{id="IRISAUDIT",dir="/usr/irissys/mgr/irisaudit/"} 1
iris_db_size_mb{id="IRISLOCALDATA",dir="/usr/irissys/mgr/irislocaldata/"} 1
iris_directory_space{id="HSLIB",dir="/usr/irissys/mgr/hslib/"} 53818
iris_directory_space{id="HSSYS",dir="/usr/irissys/mgr/hssys/"} 53818
iris_directory_space{id="ENSLIB",dir="/usr/irissys/mgr/enslib/"} 53818
iris_directory_space{id="IRISSYS",dir="/usr/irissys/mgr/"} 53818
iris_directory_space{id="HSCUSTOM",dir="/usr/irissys/mgr/HSCUSTOM/"} 53818
iris_directory_space{id="IRISTEMP",dir="/usr/irissys/mgr/iristemp/"} 53818
iris_directory_space{id="IRISAUDIT",dir="/usr/irissys/mgr/irisaudit/"} 53818
iris_disk_percent_full{id="HSLIB",dir="/usr/irissys/mgr/hslib/"} 10.03
iris_disk_percent_full{id="HSSYS",dir="/usr/irissys/mgr/hssys/"} 10.03
iris_disk_percent_full{id="ENSLIB",dir="/usr/irissys/mgr/enslib/"} 10.03
iris_disk_percent_full{id="IRISSYS",dir="/usr/irissys/mgr/"} 10.03
iris_disk_percent_full{id="HSCUSTOM",dir="/usr/irissys/mgr/HSCUSTOM/"} 10.03
iris_disk_percent_full{id="IRISTEMP",dir="/usr/irissys/mgr/iristemp/"} 10.03
iris_disk_percent_full{id="IRISAUDIT",dir="/usr/irissys/mgr/irisaudit/"} 10.03
iris_ecp_conn 0
iris_ecp_conn_max 2
iris_ecp_connections 0
iris_ecp_latency 0
iris_ecps_conn 0
iris_ecps_conn_max 1
iris_glo_a_seize_per_sec 0
iris_glo_n_seize_per_sec 0
iris_glo_ref_per_sec 7
iris_glo_ref_rem_per_sec 0
iris_glo_seize_per_sec 0
iris_glo_update_per_sec 2
iris_glo_update_rem_per_sec 0
iris_journal_size 2496
iris_journal_space 50751.18
iris_jrn_block_per_sec 0
iris_jrn_entry_per_sec 0
iris_jrn_free_space{id="WIJ",dir="default"} 50751.18
iris_jrn_free_space{id="primary",dir="/usr/irissys/mgr/journal/"} 50751.18
iris_jrn_free_space{id="secondary",dir="/usr/irissys/mgr/journal/"} 50751.18
iris_jrn_size{id="WIJ"} 100
iris_jrn_size{id="primary"} 2
iris_jrn_size{id="secondary"} 0
iris_license_available 31
iris_license_consumed 1
iris_license_percent_used 3
iris_log_reads_per_sec 5
iris_obj_a_seize_per_sec 0
iris_obj_del_per_sec 0
iris_obj_hit_per_sec 2
iris_obj_load_per_sec 0
iris_obj_miss_per_sec 0
iris_obj_new_per_sec 0
iris_obj_seize_per_sec 0
iris_page_space_per_cent_used 0
iris_phys_mem_per_cent_used 95
iris_phys_reads_per_sec 0
iris_phys_writes_per_sec 0
iris_process_count 29
iris_rtn_a_seize_per_sec 0
iris_rtn_call_local_per_sec 10
iris_rtn_call_miss_per_sec 0
iris_rtn_call_remote_per_sec 0
iris_rtn_load_per_sec 0
iris_rtn_load_rem_per_sec 0
iris_rtn_seize_per_sec 0
iris_sam_get_db_sensors_seconds .000838
iris_sam_get_jrn_sensors_seconds .001024
iris_system_alerts 0
iris_system_alerts_new 0
iris_system_state 0
iris_trans_open_count 0
iris_trans_open_secs 0
iris_trans_open_secs_max 0
iris_wd_buffer_redirty 0
iris_wd_buffer_write 0
iris_wd_cycle_time 0
iris_wd_proc_in_global 0
iris_wd_size_write 0
iris_wd_sleep 10002
iris_wd_temp_queue 42
iris_wd_temp_write 0
iris_wdwij_time 0
iris_wd_write_time 0
iris_wij_writes_per_sec 0

0
0 318
文章 Michael Lei · 七月 6, 2021 2m read

如果一张图片胜过千言万语,那么一段视频又价值几何? 当然胜过敲一个帖子。

请在 InterSystems Developers YouTube 观看我的“Coding talks”:

1. 使用 Yape 分析 InterSystems IRIS 系统性能。 第 1 部分:安装 Yape

在容器中运行 Yape。

2. Yape 容器 SQLite iostat InterSystems

提取和绘制 pButtons 数据,包括时间范围和 iostat。

如果您需要一个简单的方法来捕获和查看 Caché 和 IRIS 以及系统性能指标,可以安排每天运行 pButtons 来轻松实现。 我之前写过这方面的文章

我经常需要查看客户系统以进行容量规划和性能检查,这就是我编写 Yape 并在 GitHub 上提供它的原因。 我的 InterSystems 同事 Fabian 将 Yape 的内部结构带入了新方向,并使其正式在容器中运行。 Fabian 已经离开 InterSystems,但我继续在 GitHub 上进行开源开发。 在过去一个月左右的时间里,我修复了一些操作系统命令格式错误,使日期处理更智能,在 vmstat 中添加了“Total CPU”图表(倒着看“id”导致我的脖子拉伤),以及其他修饰性更改。

如果您想为 Yape 做出贡献,它在 GitHub 上是开源的。 如果您有功能要求,请通过建议页面告诉我。

另外,请查看 Open Exchange 上的 Yape 应用程序

在接下来的几个月,我将分享工作流程中的其他一些技巧,并期望继续开发以使呈现的数据更加有用。 Yape 非常适合检查和查看昨天或过去一周发生的事件的趋势,但是您还需要实时监视和警报... 这里我也对将来的一些帖子做个预告 ;)

0
0 166
文章 Michael Lei · 六月 27, 2021 1m read

下载网址:

https://hub.docker.com/r/yape/yape/

$ docker container run --rm -v "$(pwd)":/data yape/yape --version
yape 2.2.6
 

在以下网址查看自述文件:

https://github.com/murrayo/yape

更改包括:

  • 恢复配置文件,进行了更多更改使 x 和 y 轴更智能。
  • 更新了配置文件中的线条样式选择。
  • 解决了 yyyy 日期和 yy 日期或退出的问题。 使窗口标题的日期字符串一致(去掉小数位),在标题中添加短日期。 
  • 提高了 y 轴上小于 10 的值的小数精度,例如 Windows 每次读取时间为秒,而不是 linux 中的毫秒
  • 更新 Python 库后的一些小错误修复。

现在,GitHub 和容器保持同步。

0
0 122
文章 Michael Lei · 六月 23, 2021 3m read

注(2019 年 6 月):许多内容发生了变化,最新的详细信息请参见此处 注(2018 年 9 月):自本帖首次发布以来,内容已经有了很大改动,我建议使用 Docker 容器版本,以容器形式运行的项目以及详细信息仍然在 GitHub 的同一个地址发布,您可以下载、运行并根据需要进行修改。

与客户合作进行性能评估、容量规划和故障排除时,我经常解包和查看来自 pButtons 的 Caché 和操作系统指标。 我不久前发布了一个帖子,介绍了一个用来解包 pButtons 指标的实用工具(该实用工具使用 unix shell、perl 和 awk 脚本编写),而不是费力地浏览 html 文件,再将需要绘制的部分剪切并粘贴到 excel 中。 虽然这是一个有用的省时工具,但还不够完善... 我还使用脚本自动绘制指标图表,以便快速查看并包含在报告中。 但是,这些绘图脚本不容易维护,并且当需要站点特定的配置(例如 iostat 或 Windows perfmon 的磁盘列表)时会变得特别混乱,所以我从未公开发布过绘图实用工具。 不过我现在可以很高兴地说,已经有了简单得多的解决方案。

当我与 Fabian 一起在客户站点查看系统性能时,有了意外发现,他向我展示了使用实用的 Python 绘图模块所做的工作。 这是一个比我使用的脚本更灵活、更容易维护的解决方案。 集成 Python 模块进行文件管理和绘制图表的简便性,包括可以分享的交互式 html,意味着输出可以有更大用处。 以 Fabian 的帖子为基础,我编写了 Yape,旨在快速简单地提取客户的多种格式的 pButtons 文件,然后绘制图表。 该项目已在 GitHub 上发布,您可以下载、运行并根据需要进行修改。

概述

目前,此过程有_两个_步骤。

步骤 1. extract_pButtons.py

从 pButtons 提取感兴趣的部分并写入到 .csv 文件,以便使用 Excel 打开或使用 graph_pButtons.py 进行绘图处理。

步骤 2. graph_pButtons.py

绘制步骤 1 中创建的文件的图表。 目前,输出可以是 .png 形式的线形图或点阵图,也可以是带有平移、缩放、打印等选项的交互式 .html

GitHub 上的 Readme.md 详细介绍了如何设置和运行这两个 python 脚本,并且将是最新的参考。

其他说明

例如:使用向输出和输入目录添加前缀的选项,可以轻松遍历包含一组(例如一个星期)pButtons html 文件的目录,并针对每个 pButtons 文件都输出到一个单独目录。

for i in `ls *.html`; do ./extract_pButtons.py $i -p ${i}_; done

for i in `ls *.html`; do ./graph_pButtons.py ./${i}_metrics -p ${i}_; done

在短期内,当我继续撰写有关 Caché 容量规划和性能的系列文章时,我将使用由这些实用工具创建的图表。

我已经在 OSX 上进行了测试,但没有在 Windows 上测试。 您应该能够在 Windows 上安装和运行 Python,请留下您在 Windows 下的经验反馈。 例如,我猜想必须对文件路径斜杠进行更改。

注:直到几周前,我都没有用 Python 编写过任何东西,所以如果您是 Python 专家,那么代码中可能会有一些内容并不是最佳做法。 但是,我几乎每天都使用这些脚本,因此我将继续进行改进。 我希望我的 Python 技能会有所提高 — 但是如果您看到一些应该纠正的地方,请随意“教导”我!

如果您发现这些脚本有用,请告诉我,并不时回来看看以获取新功能和更新。

0
0 198
文章 Michael Lei · 五月 24, 2021 3m read

本帖的目的是回答一个问题。 在本系列的第二篇帖子中,我包括了从 pButtons 提取的性能数据的图表。 有人在线下问我,有没有比剪切/粘贴更快的方法从 pButtons .html文件中提取 mgstat 等指标,以便在 Excel 中绘图。

参见:- 第 2 部分 - 研究收集的指标

pButtons 将其收集的数据编译成一个 html 文件,以便发送给 WRC 和查看整理的数据。 不过,尤其是对于长时间(如 24 小时)进行收集的 pButtons 来说,一些基于时间的数据(如 mgstat、vmstat 等)以图形方式查看更容易查找趋势或模式。

0
0 199
文章 Michael Lei · 五月 24, 2021 2m read

我本人和其他技术架构师经常需要向客户和供应商说明 Caché IO 要求以及 Caché 应用程序使用存储系统的方式。 在向客户和供应商说明典型的 Caché IO 配置文件和事务性数据库应用程序的要求时,下面的表格很有用。  原始表格由 Mark Bolinsky 创建。

在以后的帖子中,我将讨论更多关于存储 IO 的内容,所以现在贴上这些表格也作为将来文章的参考。 

0
0 209
文章 Michael Lei · 五月 24, 2021 7m read

您的应用程序已部署,一切运行正常。 很好,击个掌! 然后电话突然响个不停 – 用户投诉应用程序有时很“慢”。 这是什么意思? 有时? 您有哪些工具,查找和解决这个缓慢问题应查看哪些统计数据? 您的系统基础架构是否能承担用户负载的任务? 在投入生产之前,应该询问哪些基础架构设计问题? 如何自信地为新硬件规划容量,而不会过度规定? 如何停止电话铃声? 如何一开始就不让它响?

0
1 246
文章 Michael Lei · 五月 12, 2021 7m read

部分 在上个帖子中,我们安排了使用 pButtons 进行 24 小时的性能指标收集。 在本帖中,我们将研究几个收集到的关键指标,以及它们与底层系统硬件的关系。 我们还将开始探索 Caché(或任一 InterSystems 数据平台)指标与系统指标之间的关系。 以及如何使用这些指标来了解系统的每日节拍率并诊断性能问题。

0
1 250
文章 Michael Lei · 五月 12, 2021 13m read

本周,我将关注 CPU - 主要硬件食物群之一 :) 一位客户请我就以下情况提供建议:他们的生产服务器已接近使用寿命终止,是时候更新硬件了。 他们还考虑通过虚拟化来整合服务器,并希望适当调整裸机或虚拟机的容量规模。 今天我们将关注 CPU,在后面的帖子中,我将介绍适当调整其他主要食物群(内存和 IO)规模的方法。

所以问题是:

  • 如何将五年多以前对处理器的应用要求转换成针对当今的处理器?
  • 目前的处理器有哪些是合适的?
  • 虚拟化如何影响 CPU 容量计划?
0
0 256
文章 Michael Lei · 五月 12, 2021 15m read

本帖将展示为 InterSystems 数据平台上运行的数据库应用调整共享内存需求(包括 global 和例程缓冲区、gmheap 以及 locksize)的方法,以及在配置服务器和虚拟化 Caché 应用程序时应考虑的一些性能提示。 和以往一样,当我谈到 Caché 时,我指的是所有数据平台(Ensemble、HealthShare、iKnow 和 Caché)。


[本系列其他帖子的列表](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章)

当我最初开始使用 Caché 时,大多数客户的操作系统是 32 位的,Caché 应用程序的内存有限且昂贵。 通常部署的英特尔服务器只有几个核心,唯一的扩展方式是选择大型服务器,或者使用 ECP 横向扩展。 现在,即使是基本的生产级服务器也具有多个处理器、几十个核心,并且最小内存为 128 或 256 GB,可能达到 TB。 对于大多数数据库安装,ECP 已被遗忘,我们现在可以在单台服务器上大幅提高应用事务处理速率。

0
1 280
公告 Claire Zheng · 一月 20, 2021

去年,AWS推出了基于ARM架构的AWS Graviton处理器第一代Amazon EC2 A1实例。在2019年AWS re:Invent 大会上,亚马逊宣布了第二代AWS Graviton2处理器和相关的Amazon EC2 M6g实例。相比前一代基于Intel Xeon的M5实例,Amazon EC2 M6g实例的性价比提升幅度高达40%。

1
0 428
文章 Claire Zheng · 一月 20, 2021 6m read

简介

最近完成了针对IRIS医疗版2020.1版本的性能及可扩展性基准测试,重点关注HL7v2的互操作性。本文介绍了在各种工作负载下观察到的吞吐量,并提供了IRIS医疗版用作HL7v2消息传输互操作性引擎时的系统常规配置和调整准则。

基准测试模拟了与实际环境接近的工作负载(详细信息请参见“工作负载说明和方法”部分)。本次测试的工作负载包括HL7v2患者管理(ADT)和生命体征结果(ORU)数据,并包含数据内容转换和路由。

IRIS医疗版2020.1版本可以表明,采用第二代Intel®Xeon®可扩展处理器和Intel®Optane™SSD DC P4800X系列SSD存储的商用服务器,每天的持续消息吞吐量超过23亿条(入站和出站总量),与此前的Ensemble 2017.1 HL7v2吞吐量基准测试相比,扩展性提高了一倍多。

2
0 348
文章 Claire Zheng · 一月 20, 2021 15m read

跨行业用例大多要求具备每秒接收数千或数百万条记录的能力,同时能够支持实时同步查询,例如:股票交易处理、欺诈检测、物联网应用(包括异常检测和实时OEE监控)等。Gartner将这种能力称为“HTAP”(混合事务分析处理)。Forrester等其他公司将其称为Translytics。InterSystems IRIS是功能强大、可扩展、高性能、资源高效的事务分析型数据平台,同时具备内存数据库的高性能以及传统数据库的一致性、可用性、可靠性以及低成本的特性。

0
0 372