Tag: 性能

BCrypt性能恶化

我们在Jboss服务器6.1中运行了三个Web应用程序(标准的Spring MVC-Hibernate)。 所有这三个应用程序共享一个通用的身份validation方法,该方法被编译为JAR并包含在每个WAR文件中。 我们的身份validation方法使用org.springframework.security.crypto.bcrypt.BCrypt来哈希用户密码,请参阅以下内容: hashedPassword.equals(BCrypt.hashpw(plainTextPassword, salt)); JBOSS启动选项 set “JAVA_OPTS=-Xms2048m -Xmx4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gc.txt -XX:+UseParallelOldGC 问题:当服务器重新启动时,Bcrypt.hashpw需要100ms来解密密码。 然而,经过一段时间(没有模式),Bcrypt.hashpw性能突然从100毫秒增加到10秒。 这没有明显的原因。 更多信息: Hibernate版本:4.2.4.Final Spring Version:4.0.5.RELEASE Spring 安全版本:3.2.4.RELEASE 有没有其他人见过这个问题?

什么决定了同时连接的数量

在Java servlet环境中,有哪些因素是同时用户数量的瓶颈。 服务器可以允许每个端口的HTTP连接数 服务器可以跨多个端口允许的HTTP连接数(我可以在多个HTTP端口上有多个WAS配置文件) 池中的servlet数 为WAS配置用于服务连接的线程数 RAM可用于服务器(假设应用程序中存在0内存泄漏,服务线程数之间是否有任何相关性) 还有其他因素吗? 编辑:为了使业务逻辑脱离图片,假设只有一个servlet在Log4j上打印一行。 我的Tomcat服务器可以同时处理6000个HTTP连接吗? 为什么不(文件处理?每个请求的CPU时间?)? 我可以将线程池​​大小设置为5000(空闲线程是否占用CPU / RAM)? 我可以将oracle连接池大小设置为500个连接(空闲连接是否需要CPU / RAM)? 每个连接生成的垃圾量是否会产生影响? 例如,如果对于每个HTTP连接,由Tomcat创建并留下20KB的对象,则在处理2500个请求时将使用100MB堆,这可能会触发300毫秒的GC暂停。 我们可以这样说:如果Tomcat使用0.2秒的CPU时间来处理单个HTTP请求,那么它将能够在一秒钟内处理大约500个http连接。 因此,6000个连接需要5秒。

什么是更快 – Java或C#(或旧的C)?

我目前正在决定建立一个科学计算产品的平台,并决定使用Core2 Quad CPU上的英特尔编译器的C#,Java或普通C。 它主要是整数运算。 到目前为止,我的基准测试显示Java和C相互之间的差距很大,而.NET / C#的速度约为5% – 但我的一些同事声称,如果有足够的时间,那么具有正确优化的.NET将会击败这两者让JIT做它的工作。 我总是认为JIT会在应用程序启动后的几分钟内完成它的工作(在我的情况下可能只需几秒钟,因为它主要是紧环),所以我不确定是否相信它们 任何人都可以对这种情况有所了解吗? .NET会击败Java吗? (或者我最好在这一点上坚持使用C?)。 代码是高度multithreading的,数据集的大小是几TB。 在这种情况下,Haskell / Erlang等不是选项,因为有大量现有的遗留C代码将被移植到新系统,而将C移植到Java / C#比Haskell或Erlang简单得多。 (当然,除非这些提供了显着的加速)。 编辑:我们正在考虑转向C#或Java,因为理论上它们可能更快。 每减少一个百分比我们的处理时间每年可节省数万美元。 在这一点上,我们只是试图评估C,Java或c#是否会更快。

针对大型应用程序的JVM性能调优

默认JVM参数不是运行大型应用程序的最佳选择。 来自在真实应用程序上进行调整的人的任何见解都会有所帮助。 我们在32位Windows机器上运行应用程序,默认使用客户机JVM。 我们添加了-server并将NewRatio更改为1:3(更大的年轻一代)。 您尝试过并发现有用的任何其他参数/​​调整? [更新]我正在谈论的特定类型的应用程序是一个很少关闭的服务器应用程序,至少需要-Xmx1024m。 还假设已经分析了应用程序。 我正在寻找仅在JVM性能方面的一般指导原则。

如何在开发基于Java EE的Web应用程序时提高工作效率

我想知道如何解决与其他技术堆栈( Seaside , Ruby on Rails等)相比基于Java EE的Web应用程序开发看似低效的问题。 约束是: 完成的Web应用程序必须可以在符合Java EE的应用程序容器上进行部署 如果可能,应保留以前对基于Java的解决方案的投资,即应该可以实现与基于Java的系统和库的本机互操作性 由于团队结构的原因,Java作为实现语言是首选,尽管可以接受不那么奇特的基于JVM的语言(即Groovy) 由此产生的系统需要在架构上是合理的 由此产生的系统需要是可扩展和可维护的 为了不让这个进入哲学讨论,我只对基于实践经验的建议感兴趣。 可能的示例包括特定于域的语言,框架和MDSD。 如果您指向一个抽象类的解决方案(如MDA / MDSD),请提供有关如何实现它的详细信息以及有关常见陷阱和最佳实践的信息。 如果您不同意基于Java EE的Web应用程序开发意味着生产率较低的假设,我也想听听您的推理。 编辑:由于答案远远少于我的预期,我也会接受有关失败尝试的说法,基本上将问题扩展到“如何(不)提高开发基于Java EE的Web应用程序时的工作效率?”。

逐行阅读STDIN的最快方式?

我正在寻找最经济有效的逐行读取STDIN的方法。 第一行是要测试的条件数。 以下所有行都是条件(字符串),最多为100 000个字符。 我已经尝试过以下内容(加上4次90 000个字符的结果: 带有while循环的扫描仪(7255 ms) Scanner sc = new Scanner(System.in); int numberOfLines = Integer.parseInt(sc.nextLine()); long start = 0; int i = 1; while (i<=numberOfLines){ start = System.currentTimeMillis(); sc.nextLine(); Debug.println((System.currentTimeMillis()-start) + "ms for scanner while"); i++; } 结果: 扫描仪3228ms 扫描仪2264ms 扫描仪1309ms 扫描仪454ms 带有for循环的扫描仪(7078 ms) Scanner sc = new Scanner(System.in); int numberOfLines = Integer.parseInt(sc.nextLine()); […]

Java应用程序中的高CPU利用率 – 为什么?

我有一个Java应用程序(基于Web),有时显示非常高的CPU利用率(几乎90%)几个小时。 Linux TOP命令显示了这一点。 在应用程序重启时,问题就消失了。 所以要调查 : 我使用Thread Dump来查找线程正在做什么。 在’RUNNABLE’状态中找到了几个线程,其中一些在其他几个状态中。 在重复的线程转储中,我确实看到一些始终存在于’RUNNABLE’状态的线程。 所以,他们似乎是罪魁祸首。 但是我无法确定,哪个Thread正在占用CPU或进入无限循环(从而导致高CPU利用率)。 日志不一定有用,因为违规代码可能没有记录任何内容。 我如何调查 – 应用程序的哪个部分或什么线程导致高CPU利用率? – 还有其他想法吗?

任何人都可以量化C ++和Java之间的性能差异吗?

Java在JIT之前最初很慢,但今天的性能非常接近C ++。 我想知道是否有人在两种语言之间进行了可衡量的性能比较? 与C ++相比,Java在哪里不足? Java为开发人员提供了许多生产力提升,因此他们可以更快地编写应用程序,因为垃圾大学,缺乏指针等。例如,如果用100写的话,可以更快,更可靠地开发Firefox,Webkit和Open Office等应用程序。 %Java,可能是2倍,但开发人员仍然出于性能原因选择C / C ++。 有人可以certificateJava不能像我提到的那样为应用程序执行C ++。 我只想补充一点,在C ++中仍然有很多应用程序工作是有原因的。 这不仅仅是一个主观问题。 具有较高抽象级别的语言经常会产生性能损失。 如果没有这种惩罚,我们都会用更高级别的语言进行编程。 Java与C ++相比还在哪里支付? 请明确点。

加速Java

这实际上是两个问题,但它们非常相似,为了保持简单,我想我只是把它们放在一起: 首先 :鉴于已建立的Java项目,除了简单的代码内优化之外,还有哪些方法可以加快速度? 其次 :在Java中从头开始编写程序时,有哪些好方法可以大大提高性能? 请远离一般优化技术,除非它们是Java特定的 。 我之前曾问过Python和Perl 。 对于Java,我想知道有哪些好的提示/技巧可以提高性能,以及是否有任何特别好的Java分析器。

Java中最高性能的数据库

我需要在Java中实现(真正)高性能内存数据库/存储机制的想法。 在存储20,000多个java对象的范围内,每5秒左右更新一次。 我愿意接受的一些选择: 纯JDBC /数据库组合 JDO JPA / ORM /数据库组合 对象数据库 其他存储机制 什么是我最好的选择? 你有什么经历? 编辑:我还需要能够查询这些对象