我正在寻找一些关于尝试诊断GC相关问题的指导.
我们正在使用WebSphere Portal在Solaris上进行测试,并且我当前的环境具有7%的垃圾收集开销(这是使用详细的GC计算并通过PMAT运行日志)我应该将此值与另一个以平均值运行的环境进行比较4.5%.env与WebSphere Portal的版本完全相同,JVM大小,参数,自定义变量等.在1小时性能测试期间,我的JVM有20多个分配失败,2个更多完整GC,在GC期间平均暂停时间比其环境高2秒.
您能否就所有相同的配置值和相同的1小时性能测试给出任何可能导致此问题的建议?或其他任何要审查?
谢谢
java garbage-collection performance-testing websphere-portal
我试图使用 fio 工具和 ioengine 作为 libaio 来获取性能数据(简单的 4K 随机读取)。我观察到,如果直接 io 被禁用(direct=0),那么 iops 会急剧下降。当提供 direct=1 时,IOPS 提高了 50 倍!
setup: fio being run from a linux client connected to a PCIe based
appliance over Fibre Channel.
Run Code Online (Sandbox Code Playgroud)
这是我的 fio 配置文件中的片段:
[global]
filename=/dev/dm-30
size=10G
runtime=300
time_based
group_reporting
[test]
rw=randread
bs=4k
iodepth=16
runtime=300
ioengine=libaio
refill_buffers
ioscheduler=noop
#direct=1
Run Code Online (Sandbox Code Playgroud)
通过此设置,我观察到 iops 约为 8000,当我在上面显示的配置文件中启用 direct=1 时,我看到 iops 跃升至 250K!(对于我正在使用的设置来说这是现实的)
所以,我的问题是如果我们使用 libaio 引擎,使用缓冲 I/O 有什么问题吗?如果我们使用libaio,我们是否必须坚持直接io?
我正在尝试设置一个性能测试来重复读取具有不同分块配置的 netcdf 文件,以最终确定特定用例的最佳块大小。我遇到的一个问题是,当使用xarray.open_dataset()读取文件时,即使缓存设置为 False,它仍然以某种方式将缓存存储在内存中。我知道这是基于两个指标的情况:
这是我运行的代码:
ds = xr.open_dataset("path/to/netcdf/file", engine='h5netcdf', cache=False)
lat_dim = 2160
lon_dim = 4320
time_dim = 46
read_chunk_size = 2160
data = np.empty((time_dim, lat_dim, lon_dim))
data[0:time_dim, 0:read_chunk_size, 0:read_chunk_size] = \
ds['value'][0:time_dim, 0:read_chunk_size, 0:read_chunk_size]
ds.close()
Run Code Online (Sandbox Code Playgroud)
很明显,我对 xarray 中缓存的理解非常少。因此,如果有人能向我解释它的实际工作原理,以及如何在多运行性能测试中利用它,我将不胜感激。
我有一个像波纹管一样的样本请求
{
"schema": "urn:com.xyx9723.syodhnc:bulk.v1",
"version": "7-06-26201",
"msg": [
{
"topic": "tags/kdhud/${ID}/sadknnf",
"ids": [
{
"_time": "2107-09-09 13:13:12",
"id": "TID-2153656--00089312121"
},
{
"_time": "2107-09-09 13:13:12",
"id": "TID-2153656-00089312122"
},
{
"_time": "2107-09-09 13:13:12",
"id": "TID-2153656-00089312123"
},
{
"_time": "2107-09-09 13:13:12",
"id": "TID-2153656-00089312124"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
当涉及到实际测试时,我必须发送带有 100 个 IDS 的请求,其增量值例如 (TID-2153656--00089312121, TID-2153656--00089312122, TID-2153656--00089312123 ....
在 JMeter 中发送请求时如何在请求中提供增量值。
我编写了一个 JMH 基准测试来比较 java 1.8 中 Avro (1.8.2) 和 Protobuf (3.5.0) 的序列化性能。根据 JMH 的说法,Protobuf 可以在一秒钟内序列化某些数据 470 万次,而 Avro 每秒只能序列化 800k 次。
序列化的测试数据约为 200 字节,我为 Avro 和 Protobuf 生成了架构。
这是我的 Avro 序列化代码,熟悉 Avro 的人可以确保我没有犯一些重大错误吗?
JMH 进行了基准测试,名为 Serialize 的方法。另外,我已将其发布在https://groups.google.com/forum/#!topic/protobuf/skmE78F-XbE
非常感谢
public final class AvroSerialization{
private BinartEncoder encoder;
private final SpecificDatumWriter writer;
public AvroSerialization( ){
this.writer = new SpecificDatumWriter( AvroGeneratedClass.class );
}
//MyDataObject = A pojo that contains the data to be serialized
public final byte[] serialize( MyDataObject data ){
ByteArrayOutputStream out …Run Code Online (Sandbox Code Playgroud) java serialization performance-testing protocol-buffers avro
我有单元测试。如果其中之一失败,我的构建就会失败。
我想将相同的原则应用于性能。我有一系列针对通过库的几个热路径的微基准测试。根据经验,这些领域的放缓对图书馆的整体性能产生了不成比例的影响。
如果有某种方法可以有一些“性能构建”的概念,如果性能回归太显着,它可能会失败,那就太好了。
我曾考虑过不得超过的硬编码阈值。就像是:
Assert.IsTrue(hotPathTestResult.TotalTime <= threshold)
但是将其与绝对值挂钩是硬件和环境相关的,因此很脆弱。
有没有人实现过这样的东西?微软为 Kestrel 做了什么?
我们将 Keycloak 4.8.1.Final 部署在具有两个默认设置的节点的 k8 集群上。后端数据库是 PostgreSQL。
我们正在增加 Keycloak 中的领域数量,以确定 Keycloak 是否可以支持更多领域;这些创作是按顺序完成的。
然而,当领域的数量达到 470 左右时,它使得 keycloak 基本无法使用,管理 GUI 根本不加载,请求执行时间太长。
以下是所用时间的摘要。我们尚未向领域添加任何用户。
+--------------+----------+------------+------------+------------+
| Operation | 0 realms | 100 realms | 250 realms | 350 realms |
+--------------+----------+------------+------------+------------+
| Create realm | 1104 | 3739 | 8659 | 11535 |
| Get realm | 128 | 961 | 3067 | 3853 |
| Get token | 636 | 1159 | 2714 | 3197 |
| Get roles | 127 | 1037 …Run Code Online (Sandbox Code Playgroud) 我需要实现下一个逻辑:
1)执行on_start方法(例如login)
2)执行下一个任务(task_2)5次
3)之后执行下一个任务(task_3)10次
返回on_start等...
所以最后我需要登录:1,任务_2:5,任务_3:10。(每1次登录5次和10次)
我尝试用下面的代码来实现它:
class MyTaskSet(TaskSequence):
def on_start(self):
login()
@seq_task(1)
def task_2(self):
print('Need to be executed 5 times after 1 login')
@seq_task(2)
def task_3(self):
print('Need to be executed 10 times after 1 login')
class LocustUser(HttpLocust):
host = http://localhost
task_set = MyTaskSet
Run Code Online (Sandbox Code Playgroud)
性能大师可以帮我解决这个逻辑吗?
我正在尝试使用搜索引擎爬虫用户代理(例如 Googlebot)而不是默认的 lighthouse 用户代理通过 lighthouse 运行页面性能报告。我在灯塔中看不到可以指定备用用户代理的任何地方,所以想知道是否可能?
谢谢