有点困惑。我从我运行的报告中得到了一些 Loadrunner 分析。我是测试新手。我对第 90 个百分位数的理解是,鉴于它采用第 90 个百分位数并排除异常值,它呈现了更真实的情况。尽管我查看的是两份不同的报告,但 90% 的响应时间高于摘要报告中给出的平均响应时间。这怎么可能?
我正在查看交易响应时间(百分位数)的图表以及最后 10% 的增长,因此告诉我采用 90% 应该会看到较短的响应时间。
Example
Transaction 1
Min 0.012
Avg 1.919
Max 20.935
SD 2.718
90 Percentile 6.412
Run Code Online (Sandbox Code Playgroud)
很多交易或多或少都是这样的。为什么第 90 个百分位数高于平均值?
我目前正在尝试遵循Ruby on Rails 文档中给出的性能测试教程。但我在第一步就陷入了困境!
当我尝试运行下面给出的命令时,出现错误,
命令:
$ rails generate performance_test homepage
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Could not find generator 'performance_test'. Maybe you meant 'integration_test', 'resource_route' or 'coffee:assets'
Run Code Online (Sandbox Code Playgroud)
我跑去"rails generator --help"查看可以生成的可能文件,下面是我得到的输出,
Running via Spring preloader in process 9465
Expected string default value for '--jbuilder'; got true (boolean)
Usage: rails generate GENERATOR [args] [options]
General options:
-h, [--help] # Print generator's options and usage
-p, [--pretend] # Run but do not make any changes
-f, [--force] # Overwrite files that already …Run Code Online (Sandbox Code Playgroud) 我是加特林工具的新手。
我想在方法中给出一个随机字符串StringBody()。例如,对于 100 个请求,将传递 100 个不同的字符串。
这是我的示例代码:
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
class LoadTest extends Simulation {
private val csvFeeder = csv("data.csv").random
val httpConf = http
.baseURL("http://localhost:5000/sample")
.acceptHeader("text/html,application/xhtml+xml,application/json,application/xml;q=0.9,*/*;q=0.8")
val scn = scenario("load test")
.feed(csvFeeder)
.exec(http("request")
.post("http://localhost:5000/sample")
.body(StringBody(s"""{"inputData": ${csvFeeder} }""")).asJSON
setUp(
scn.inject(
constantUsersPerSec(50)
during (10 seconds) randomized).protocols(httpConf))
}
Run Code Online (Sandbox Code Playgroud)
但 CSV 文件中的所有字符串都会被传递。
我的代码有什么问题?我该如何解决?
我有非常简单的 scala 代码:
def main(): Int = {
var i: Int = 0
var limit = 0
while (limit < 1000000000) {
i = inc(i)
limit = limit + 1
}
i
}
def inc(i: Int): Int = i + 1
Run Code Online (Sandbox Code Playgroud)
我正在使用 JVM JIT 方法内联 inc 方法。当启用内联时,我得到了 2 秒与 4 纳秒的令人惊讶的好例子 - 我想确保或至少验证的是,同时没有循环优化占据宫殿。我看了一下机器代码,看起来没问题
0x000000010b22a4d6: mov 0x8(%rbp),%r10d ; implicit exception: dispatches to 0x000000010b22a529
0x000000010b22a4da: cmp $0xf8033d43,%r10d ; {metadata('IncWhile$')}
0x000000010b22a4e1: jne L0001 ;*iload_3
; - IncWhile$::main@4 (line 7)
0x000000010b22a4e3: cmp $0x3b9aca00,%ebx
0x000000010b22a4e9: …Run Code Online (Sandbox Code Playgroud) 有人可以解释一下如何使用 Kafka 测试性能吗?
bin/kafka-consumer-perf-test.sh --topic benchmark-3-3-none \
--zookeeper kafka-zk-1:2181,kafka-zk-2:2181,kafka-zk-3:2181 \
--messages 15000000 \
--threads 1
Run Code Online (Sandbox Code Playgroud)
和
bin/kafka-producer-perf-test.sh --topic benchmark-1-1-none \
--num-records 15000000 \
--record-size 100 \
--throughput 15000000 \
--producer-props \
acks=1 \
bootstrap.servers=kafka-kf-1:9092,kafka-kf-2:9092,kafka-kf-3:9092 \
buffer.memory=67108864 \
compression.type=none \
batch.size=8196
Run Code Online (Sandbox Code Playgroud)
我不清楚参数是什么以及应该获得的输出是什么。我如何检查是否向 Kafka 主题发送了 1000 条消息、其性能和确认。
我正在考虑使用 Locust 进行一些性能测试。我对 Python 更熟悉,发现 Locust 比 JMeter JMX 更容易阅读。
我习惯使用 JMeter 做的一件事是从多次运行中生成我自己的平均值、90%、95% 和 99% 报告。为此,我编写了一个脚本来解析 JMeter 日志,其中包含每个请求的信息(响应时间、有效负载大小等),然后将所有运行合并到单个数据集中并生成平均值和百分位数。
我似乎找不到一个选项来获得这种级别的详细日志记录。我尝试过 --logfile= 但该文件不包含有关单个请求的任何内容。我尝试过 --csv= ,输出仅包含摘要信息 - 在尝试确定运行组合中的百分位数时无法使用该信息。
有没有办法获取每个请求的详细日志信息?
我试图在加特林请求中实现的步骤:
1. 在循环中点击请求。
2. 将 JSON 响应中的“status”值保存到“respStatus”中
3. 将“respStatus”设置为会话变量“workStatus”
4. 递归检查会话变量“workStatus”的值,并在其值发生变化时退出创造其他任何东西。
这是我的代码。下面这个请求在第一次迭代后停止执行,检查响应正文显示 JSON 响应中“创建”的值在停止时没有改变。代码有什么问题或者有其他替代方法可以实现此目的吗?
.doWhile(session => !session(workStatus).as[String].equal("creating"),"index"){
exec(http("Request1")
.get(<URL goes here>)
.header(<Headers in a map>)
.check(jsonPath("$..status").saveAs("respStatus")))
.exec(session => session.set("workStatus","${respStatus}"))
.pause(10)
}.pause(10)
Run Code Online (Sandbox Code Playgroud) 我perf曾经用perf record ./application. perf report向我展示了有关它的各种事情。如何显示运行应用程序所需的总时间以及运行特定“符号”/功能的总时间?perf 似乎经常显示百分比,但我想要原始时间,并且它想要“包容性”时间,即包括孩子。
Ubuntu Linux 18.04 上的 perf v4.15.18
我在 Scrapy 中有一个蜘蛛,我想检查瓶颈。我还有一些类进入主 Spider 类。我想使用 cProlifer 检查函数执行时间:
if __name__ == '__main__':
import pstats
import cProfile
from pstats import SortKey
cProfile.run("QuotesSpider(scrapy.Spider)", "output.dat")
with open('output_time.txt', 'w') as f:
p = pstats('output.dat', stream=f)
p.sort_stats('time').print_stats()
with open('output_calls.txt', 'w') as f :
p = pstats('output.dat', stream=f)
p.sort_stats('calls').print_stats()
Run Code Online (Sandbox Code Playgroud)
QuotesSpider(scrapy.Spider)蜘蛛类在哪里。可以理解的是,当使用 运行蜘蛛时scrapy crawl quotes,我收到以下错误:NameError: name 'QuotesSpider' is not defined。
如何正确地将 cProfile 与 Scrapy 集成?由于 Scrapy 的请求是异步的,cProfile 是解决这个问题的最佳方法吗?
所以我对 Rust 还很陌生,但来自 Python 的我发现这种情况总体来说非常令人困惑。
我喜欢 Python,因为如果你想对一段代码或只是一个函数调用进行计时,它非常容易:
print(timeit('a = "hee hee la le dah"; my_awesome_fn()', number = 1_000, globals=globals()))
Run Code Online (Sandbox Code Playgroud)
然后只需调用python script.py,或者更好的是,只需使用 IDE 中的绿色“运行”按钮即可调用脚本。但我在 Rust 中找不到等效的功能。
我知道 Rust 生态系统中有一个称为基准测试的概念,并且有一些类似的库就是criterion为此目的而存在的。问题是我对高等数学和统计学一无所知(本质上可以把我当作一个无能的白痴),而且我怀疑我能否从这样的框架或工具中受益匪浅。
所以我只是好奇如何tests在 Cargo 中使用来测试 Rust 中的代码块,甚至更好,甚至是函数调用。
例如,假设我在 Rust 中有类似的函数,我想多次调用它,然后检查性能如何变化等:
pub fn my_awesome_fn() {
trace!("getting ready to do something cool...");
std::thread::sleep(std::time::Duration::from_millis(500));
info!("finished!");
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能简单地在 Rust 中计时这个函数my_awesome_fn?我想我正在寻找类似timeitpython 或类似的东西。理想情况下,它应该是直接使用的,并假设我对我正在做的事情一无所知。我很好奇是否有一个现有的库或框架可以用于此目的。
performance ×3
gatling ×2
scala ×2
apache-kafka ×1
c ×1
jit ×1
jvm ×1
loadrunner ×1
locust ×1
optimization ×1
percentile ×1
perf ×1
ruby ×1
rust ×1
scrapy ×1
time ×1
timeit ×1
vugen ×1
web-scraping ×1