相关疑难解决方法(0)

HmacSHA1的Java Mac.getInstance很慢

我在运行OSX 10.9.4,1.7GHz i7,8GB内存的Macbook Air上运行以下Java程序.我安装了Java Cryptography Extension(JCE).

import javax.crypto.Mac;

public class Main {
  public static void main(String[] args) throws Exception {
    Mac.getInstance("HmacSHA1");
  }
}
Run Code Online (Sandbox Code Playgroud)

运行这个简单的程序会导致运行时间超过5秒!

$ javac -version
javac 1.7.0_45
$ javac Main.java
$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
$ time java Main

real    0m5.326s
user    0m0.390s
sys     0m0.033s
Run Code Online (Sandbox Code Playgroud)

我做了很多搜索,但没有找到解决方法或解释的方法.

以前有人听说过这个问题吗?或者知道一种方法让我调试正在发生的事情?当你的单位测试一直持续到目前为止,对你的单位测试给予5秒的惩罚是非常令人沮丧的.

编辑: 这是程序内部的时间安排和安全提供程序列表:

import java.security.Provider;
import java.security.Security; …
Run Code Online (Sandbox Code Playgroud)

java random macos cryptography hmac

7
推荐指数
1
解决办法
1829
查看次数

生成随机 UUID 非阻塞

通过使用 Blockhound io.projectreactor.tools blockhound-junit-platform我发现 UUID.randomUUID 是一个阻塞调用,这对我们来说是一个问题,因为我们使用的是 Spring Boot Webflux 版本 2.2.2.RELEASE

有没有其他方法可以以非阻塞方式获取随机 uuid,或者是否有任何其他 Java 库推荐用于非阻塞生成随机字符串。

来自blockhound的堆栈跟踪:

java.lang.Error: Blocking call! java.io.FileInputStream#readBytes
at reactor.blockhound.BlockHound$Builder.lambda$new$0(BlockHound.java:196) ~[blockhound-1.0.1.RELEASE.jar:na]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
|_ checkpoint ? org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain][ExceptionHandlingWebHandler]
Stack trace:
    at reactor.blockhound.BlockHound$Builder.lambda$new$0(BlockHound.java:196) ~[blockhound-1.0.1.RELEASE.jar:na]
    at reactor.blockhound.BlockHound$Builder.lambda$install$6(BlockHound.java:318) ~[blockhound-1.0.1.RELEASE.jar:na]
    at reactor.blockhound.BlockHoundRuntime.checkBlocking(BlockHoundRuntime.java:46) ~[na:na]
    at java.base/java.io.FileInputStream.readBytes(FileInputStream.java) ~[na:na]
    at java.base/java.io.FileInputStream.read(FileInputStream.java:279) ~[na:na]
    at java.base/java.io.FilterInputStream.read(FilterInputStream.java:133) ~[na:na]
    at java.base/sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:424) ~[na:na]
    at java.base/sun.security.provider.NativePRNG$RandomIO.ensureBufferValid(NativePRNG.java:526) ~[na:na]
    at java.base/sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:545) ~[na:na]
    at java.base/sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:220) ~[na:na]
    at java.base/java.security.SecureRandom.nextBytes(SecureRandom.java:741) ~[na:na]
    at java.base/java.util.UUID.randomUUID(UUID.java:150) ~[na:na]
Run Code Online (Sandbox Code Playgroud)

java uuid reactive-programming project-reactor spring-webflux

7
推荐指数
1
解决办法
1627
查看次数

Oracle getConnection运行缓慢

在Java项目中,我使用的是ojdbc6 jar

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.1.0</version>
        <scope>compile</scope>
    </dependenc>
Run Code Online (Sandbox Code Playgroud)

我运行一天的第一次,dataSource.getConnection()很快.第二次通常没关系.接下来的几次大约需要45秒.之后,需要几分钟.一旦我有一个给定应用程序运行的FIRST连接,我得到的任何新连接都非常快.此延迟仅为给定运行获取FIRST连接.

是什么让我的第一次连接变得如此缓慢?

我正在观看netstat并且在成功运行后看不到任何连接.尝试了几个不同的连接池(DBCP,C3PO)没有运气.通过源代码调试,org.springframework.jdbc.datasource.DataSourceUtils的延迟是100%:

Connection con = dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑了更多细节

1)我正在使用连接池(DBCP或C3PO),它可以保存连接以备将来使用.当我谈到获得新连接时,我的意思是在第一个连接正在使用时......我需要转到数据库并获得新连接.当然,我可以一遍又一遍地从连接池返回并获得相同的连接.但同时获得第二个也很快.

2)我不知道我的DB允许我登录多少个连接.知道这个属性在oracle中的位置吗?

java oracle datasource jdbc

6
推荐指数
1
解决办法
1万
查看次数

使用jbcrypt时性能可变且性能下降

我正在使用jbcrypt来哈希项目中的密码.验证我正在使用的硬件上的密码时性能大约为500毫秒(log_rounds设置为12).然而,经过一段时间的常规使用后,表演时间突然下降到惊人的15秒.下降非常突然,没有累积,并且在重新启动过程之前保持不变.

分析显示在密钥(..)方法中使用了额外的时间.

来源:http://jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java

此方法仅使用xor,shift等基本函数计算哈希值.没有对象分配,外部资源的使用,随机数生成等.

在同一进程中,性能不会因其他功能而下降.内存分配稳定且低.不涉及完整的GC.

有没有人见过这个或为什么会发生这种情况的任何线索?我可以理解一种可变性能在某种程度上取决于其他情况,但这是一个非常突然和稳定的下降,从大约500ms.到大约15000毫秒.

java security performance bcrypt jbcrypt

6
推荐指数
1
解决办法
661
查看次数

服务响应速度慢时间:Java SecureRandom和/ dev/random

我正在尝试调试部署在Tomcat上的应用程序提供的一些慢响应.现在,我侧重于SecureRandom/dev/random(其他一些可能的原因进行了调查和排除).模式如下:

  • Tomcat重启后第一次调用正好需要30.0 xy秒(即使请求在启动后4分钟到达)
  • 之后,一些调用只需要15.0 pq秒(我没有特定的模式可以建立,pq是TP99中所用的时间近似时间)

服务调用涉及加密和解密(AES/ECB/PKCS5Padding).

SecureRandom init/repopulating是否可能导致这种情况发生?

(虽然有一个用catalina.log写的日志说"Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [28,760] milliseconds.")

此外,为了检查是否/dev/random/dev/urandom正在使用,我到测试使用的这个问题.令我惊讶的是,我没有看到其中任何一个的读取,不像链接问题中发生的那样.这些是strace日志中的最后几行:

3561  lstat("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/jsse.jar", {st_mode=S_IFREG|0644, st_size=258525, ...}) = 0
3561  open("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/jsse.jar", O_RDONLY) = 6
3561  stat("/dev/random", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 8), ...}) = 0
3561  stat("/dev/urandom", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
3561  open("/dev/random", O_RDONLY)     = 7
3561  open("/dev/urandom", O_RDONLY)    = 8 …
Run Code Online (Sandbox Code Playgroud)

java random tomcat aes strace

5
推荐指数
1
解决办法
4291
查看次数

如何在java中生成所有可能的64位随机值?

Java是否SecureRandom.nextLong()返回所有可能的值,因为它继承了Random仅使用48位的值?如果没有,我是否仍然可以通过修改Random类以及如何进行Java来实现它?我只想使用所有随机长数字生成器,如果可能的话,可以返回所有可能的长值.

java random generator long-integer secure-random

3
推荐指数
1
解决办法
272
查看次数

java慢:熵相关问题

我遇到了一个问题,当使用SSL时java很慢.解决方案是添加

-Djava.security.egd=file:/dev/./urandom
到命令行的java.由于我有多个JVM,我不想修改每个JVM以包含此字符串,因此希望将其添加到文件中
$JAVA_HOME/jre/lib/security/java.security

现在,java.security文件已经包含了

securerandom.source=file:/dev/urandom

两个问题:

  1. 为什么以及如何"/ dev/urandom"与"/dev/./urandom"不同.为什么java不接受"/ dev/urandom"
  2. 对于我运行的JVM,如何判断他们是否使用了正确的urandmon设备(vs random)

java jboss tomcat weblogic

2
推荐指数
1
解决办法
1300
查看次数