- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个 REST API (GET),可以同时被很多移动用户调用。我们目前的用户群约为 30 万,但预计将增长约 100 万。
API 很简单。它使用 Akka 发出 3 个并行请求,并返回组合结果。主要代码如下所示:
Future<List<CardDTO>> pnrFuture = null;
Future<List<CardDTO>> newsFuture = null;
ExecutionContext ec = ExecutionContexts.fromExecutorService(executor);
final List<CardDTO> combinedDTOs = new ArrayList<CardDTO>();
// Array list of futures
List<Future<List<CardDTO>>> futures = new ArrayList<Future<List<CardDTO>>>();
futures.add(future(new PNRFuture(pnrService, userId), ec));
futures.add(future(new NewsFuture(newsService, userId), ec));
futures.add(future(new SettingsFuture(userPreferenceManager, userId), ec));
Future<Iterable<List<CardDTO>>> futuresSequence = sequence(futures, ec);
// combine the cards
Future<List<CardDTO>> futureSum = futuresSequence.map(
new Mapper<Iterable<List<CardDTO>>, List<CardDTO>>() {
@Override
public List<CardDTO> apply(Iterable<List<CardDTO>> allDTOs) {
for (List<CardDTO> cardDTOs : allDTOs) {
if(cardDTOs!=null)
combinedDTOs.addAll(cardDTOs);
}
Collections.sort(combinedDTOs);
return combinedDTOs;
}
}
);
Await.result(futureSum, Duration.Inf());
return combinedDTOs;
这 3 个 future 是来自 MY SQL 数据库的简单选择语句,执行时间不到一毫秒。我们在这里使用 Spring + Hibernate。
整个 API 平均需要 50ms 才能返回结果。
现在,当我们使用 3 台服务器进行性能测试时,我们得出的结论是,在每秒大约 200 个请求之后,API 的响应时间开始线性增加。它在负载下高达 3 -5 秒。令人惊讶的是,当时 CPU 使用率大约为 20%,并且 JVM 内存中没有发生任何重大变化。内存使用量约为 700 MB。我们有 16 GB
我找不到瓶颈在哪里。如何将此 API 扩展到至少 1000 个请求/秒。我至少在寻找从哪里开始的指示。我探索过 top
、visualvm
等工具,但没有发现任何令人担忧的东西。
这是我们在 Java 7 上的 JVM 设置
export JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -server -Xms4g -Xmx16g -XX:MaxPermSize=1g -XX:PermSize=512m -XX:MaxNewSize=4g -XX:NewSize=512m -XX:SurvivorRatio=16 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=0 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:ParallelGCThreads=12 -XX:LargePageSizeInBytes=256m -Dspring.profiles.active=staging -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9899 -Djava.rmi.server.hostname=$HOSTNAME -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
这些问题我都看了,好像是大势所趋。切换到 node.js 或 Erlang 等其他框架会有帮助吗?
Response time Increases as concurrency increases in Java
Tomcat response time is increasing as concurrency is increased in apache bench
最佳答案
无法确定您的性能问题出在哪里,但我发现一般是因为(根据您的描述):
我建议你做的是尽可能地隔离。先证明不是数据库连接池。那是运行相同的并发负载,但只执行数据库部分。请记住,三台服务器需要 3 个连接。
接下来运行 1-3 个服务器进行模拟响应,而不使用和不使用负载均衡器进行任何数据处理。您会对负载平衡器/网络导致问题的频率感到惊讶。
继续分离事物..测试、观察、重复。
最后,当您将它真正隔离为 Tomcat 时,您可能想阅读什么 Netflix does .
关于java - REST API 响应时间在负载下增加 [Tomcat],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985842/
我有一些关于 Volley 的问题 如何获得与 volley 库的连接响应时间? 有解决方案吗? 我可以使用计时器来获取响应时间吗?如何使用? 还有在 volley 连接前执行的方法吗? 我的代码是这
我管理一个使用 symfony2 创建的网站,我需要“稳定”它的响应时间。 响应时间从 100 毫秒(下限) float 到 1200 毫秒,并且随机改进(我已经排除了访问依赖性)。 配置如下: Ce
我正在使用门牌号数据查询简单的 Elasticsearch 索引。 ".house-numbers": { "mappings": { "house-number": {
本文分享自华为云社区《【高并发】性能优化有哪些衡量指标?需要注意什么?》,作者:冰河 。 最近,很多小伙伴都在说,我没做过性能优化的工作,在公司只是做些CRUD的工作,接触不到性能优化相关的工作。现在
目前,我正在尝试开发用于即时消息传递的 Android 应用程序。我想在 Ubuntu 服务器上为此使用 ejabberd。只有一个问题。当我首先尝试使用此 xml 行连接到我的 ejabberd 时
好吧,我做了这个很长的查询。它工作完美,但需要 15-30 秒才能给我结果...我不是 SQL 专家,所以我想问是否有办法提高 MySQL 响应时间...也许需要超过1 个查询或类似的内容。 PS:它
我有一个标准用例,用于监控到达我的 Tomcat 服务器的请求的响应时间。我已启用访问日志并将响应时间 (%D) 添加到模式。 现在我想监控我的服务器的响应时间。例如: 过去一小时的平均响应时间是多少
我希望减少 Web 服务器针对给定查询从 API 服务器请求/接收数据的完整时间。 假设 MySQL 是瓶颈,我将 API 服务器数据库更新到 Cassandra,但完成时间仍然相同。可能是其他东西是
我是一个 java 初学者,我正在尝试编写一个机器人来填写一个对我来说非常烦人的表格。 为什么这种形式令人烦恼?想象一下,我必须在该表单中插入一千个不同的值,但它一次只允许我插入一个值。每次插入每个值
有 C++ 桌面应用程序,我需要测量 UI 滞后,因为用户说它有时会滞后。我该如何实现?尝试在操作后将 pywinauto 与计时器启动-停止一起使用,但它单击元素的速度非常慢。另一方面,尝试使用 S
我正在构建一个服务器监控系统,我想向 Web API 发送请求,并在 JSON 对象中获取服务器的健康状况、数据库连接是否正常、响应时间等。 如何实现响应时间,即 Web API 需要多长时间来响应请
我正在尝试加快测试 jetty (将其与使用 apache 进行比较)以提供动态内容。 我正在使用三个客户端线程对此进行测试,一旦响应返回就会再次请求。它们在本地盒子(OSX 10.5.8 mac b
我正在构建一个带有 API 的 PHP 应用程序,该应用程序能够非常快速地(在 100 毫秒内)响应所有请求,并且必须能够每秒处理多达 200 个查询(请求以 JSON 格式,响应需要数据库查找+每次
在 AWS 实例上抛出 Node.JS 并测试请求时间,得到了一些有趣的结果。 我在服务器上使用了以下内容: var http = require('http'); http.createServer
我有一个 API,它登录一个帐户,然后对我想通过 CFHTTP 请求出价的项目执行搜索,如下所示。 搜索.cfm: 登录.cfm:
这些响应时间是来自 JMeter TTFB 还是 TTLB? 最佳答案 响应时间是“到最后一个字节的时间” http://jmeter.512774.n5.nabble.com/JMeter-resu
我知道 LoadRunner 用于系统响应,但我想知道它是否也可以测量,例如渲染时间(大型列表中的数千个项目等)。我想这可以通过验证特定对象出现在 UI 中来完成,但我认为 LoadRunner 不运
我正在制作一个元素(网站),我需要一些建议。我的计划是将 NodeJS 与 express webframework 一起使用。我想让这个网站真正用户友好和友好,就像每个人都希望他们的网站一样。问题是
抱歉我的英语不好,但我尽力了:)我有一些问题,希望我能在这里找到答案。我想在 html/css/js 中创建一个离线聊天机器人并使用 Intel XDK 程序。 我不知道,如何给聊天机器人一个特殊的命
我正在使用 java 脚本/Jquery 从我的客户端代码使用 Microsoft Face api。这是代码。我使用相机捕获图像,然后将该图像转换为 blob 并将其发送到 api。我正在得到结果。
我是一名优秀的程序员,十分优秀!