Articles of jvm

JVM崩溃,我不明白为什么

嘿家伙,我想我已经find了什么是造成这个错误,但我不明白为什么或如何解决它。 我曾尝试在两台Windows 7和一台Windows 8计算机上运行此代码,结果相同。 错误并不总是发生,但有时会发生。 这是我认为导致它的一段代码。 private WatchKey registerPath(Path path) { try { System.out.println("Making Key for: " + path.toString()); System.out.println("ChangesWatcher: " + changesWatcher); WatchKey key = path.register(changesWatcher, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_CREATE); System.out.println("Done Making Key"); return key; } catch (Exception err) { err.printStackTrace(System.out); return null; } } 这是控制台输出: Making Key for: C:\Users\Fiona\Simple Cloud ChangesWatcher: sun.nio.fs.WindowsWatchService@2be33a92 # # […]

无法识别的选项: – 无法创buildJava虚拟机

我试图在Linux服务器上运行我的.jar文件。 这些是我正在运行的命令 JAVA_HOME=/app/local/opt/jdk/packages/jdk1.6.0_30/ export PATH=$JAVA_HOME/bin:$PATH cd folder nohup java -jar program.jar & 当星期五跑完时,这是完美的。 但是,今天我越来越 Unrecognised option: – Could not create the Java virtual machine. 在我nohup.out 如果我在设置path后运行java -v,则会遇到同样的问题。 任何人都可以build议吗? 真的很困惑这个。 感谢您的任何帮助。

JPS工具如何获取正在执行的主类或jar的名称

我想知道,JPS工具如何获得它在jvm进程中执行的主类的名称。 它是 jps -l 123 package.MainClass 456 /path/example.jar 我正在谈论Linux(我对Windows不感兴趣,我没有Win机器去试验)。 我可以想到2种方法 连接到正在讨论的JVM 从/proc文件系统 关于第一种方法,是使用本地JMX连接吗? 不过,它必须去/proc的pids。 有PID,所以它必须问OS jps列表本身也是 关于第二个select,我觉得这可能是正确的,因为 在命令行中,有-jar或MainClass /proc知道PID 在jps开始执行某些操作之前,它在/proc拥有自己的文件夹 但是 ,我在这里面临的问题很less。 当java命令非常长(例如,有非常长的-classpath参数)时,有关命令行的信息不适合在/proc为它保留的空间。 我的系统有4kB,而我在别处学到的东西,在OS代码中是硬连线的(改变它需要内核编译)。 但是,即使在这种情况下, jps仍然可以在某个地方获得主类。 怎么样? 我需要find比调用jps更快的方式来获取JVM进程。 当系统负载jps时候(例如,当JVM数量开始的时候), jps卡住了几秒钟(我已经看到它等待大约30秒)。

调用DestroyJavaVM后重新调用JNI_CreateJavaVM返回-1

调用DestroyJavaVM后,我试图调用JNI_CreateJavaVM。 我按照以下顺序调用它们:InitJVM – > ReleaseJVM – > InitJVM 初始化时,JNI_CreateJavaVM返回0,并正常工作。 第二次在销毁后初始化时,JNI_CreateJavaVM返回-1而不起作用。 会有什么问题? 这是一个创buildJVM的函数: #elif __linux HRESULT PWNJava::InitJVM(void) { if(m_bRunning) { Log("Error : JVM is already Running! (PWNJava::Init)"); return PWN_FAIL; } const int kNumOptions = 3; JavaVMOption options[kNumOptions] = { { const_cast<char*> ("-Xmx128m"), NULL}, { const_cast<char*> ("-verbose:gc"), NULL}, { const_cast<char*> ("-Djava.class.path=../../Class"), NULL} }; JavaVMInitArgs vm_args; vm_args.version = […]

从linux内的jvm中查找硬性和软性打开的文件限制(ulimit -n和ulimit -Hn)

我有一个问题,我需要从java / groovy程序中找出linux中进程的软硬件打开文件限制。 当我从terminal执行ulimit时,会为软打开的文件限制提供单独的值。 $ ulimit -n 1024 $ ulimit -Hn 4096 但是,如果我常规执行它,它会忽略软限制并始终返回硬限制值。 groovy> ['bash', '-c', 'ulimit -n'].execute().text Result: 4096 groovy> ['bash', '-c', 'ulimit -Hn'].execute().text Result: 4096 请让我知道,如果我失去了一些东西。 我已经使用Ubuntu 12.04,Groovy版本:1.8.4 JVM:1.6.0_29执行。 更新 :我在Java中尝试了同样的事情。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; public class LinuxInteractor { public static int executeCommand(String […]

限制JVM使用的线程数

如何设置限制某人可以创build的线程数量? 我所做的就是运行某人的代码(类似于ideone),并且想要限制他可以产生的线程数量。 怎么做? 一些jvm设置或别的东西? 编辑我添加更多的指定信息,因为有些人没有得到我的观点。 一些随机的人给我一个我的电脑将要执行的代码 代码必须在最多k个线程内执行 所有的都必须是自动化的 – 像SPOJ,ideone等一样工作

SocketInputStream.socketRead0()中CPU占用率高的原因

在分析本土networking应用程序的时候,我发现下面非常奇怪(至less对我来说)是观察的。 几乎所有的时间都花在SocketInputStream类的socketRead0()方法中。 这并不奇怪,因为我的应用程序在每个请求上都与远程服务联网。 奇怪的是,这种方法不仅壁挂时钟使用率高, CPU时钟时间也很高。 我不明白为什么CPU时间很长,因为如果我的应用程序等待远程服务来回复(实际上这不是很快),那么应用程序本身就没有什么可做的了。 所以CPU时间应该显然很低。 还有一些观察: 在采样模式下的VisualVM显示,方法SocketInputStream.socketRead0()正在消耗高达95%的时间(挂钟时间和 CPU时间); mpstat (我们使用Linux作为操作系统)显示约90%的用户时间和约1-3%的系统时间(其余为空闲时间); 应用程序部署在专用服务器上; 远程服务也是HTTP Web应用程序。 平均响应时间约为100ms。 平均响应大小约为2Kb。 我的应用程序使用spring RestTemplate与远程服务交互,而不是直接与SocketInputStream交互。 现在我只有一个想法 – 也许这是在JVM中调用本地方法的开销( SocketInputStream.socketRead0()是本地的)? 你怎么看? 有没有其他的原因呢?

在Linux中运行时如何在Java中创build符号链接?

在Linux中运行时如何在Java / JVM中创build符号链接? 除了使用Java本地接口(JNI)或者java.lang.Runtime.exec("/bin/ln -s /some/path symlink")什么方法吗? 创build一个符号链接是非常依赖于平台的,但是我主要关心在Linux上运行,如果在Windows中创build一个快捷方式,那么奖励就会很大。

无法创buildJava虚拟机

面临一些与Java虚拟机初始化的问题。 当我使用root帐户时,我可以正常使用java。 但是当我是一个用户帐户,它返回以下错误 user@host# $JAVA_HOME/bin/java -version Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine. 它不像一个内存问题,因为相同的命令适用于root帐户。 可用内存(免费-m)超过1200MB另外我已经尝试增加JVM内存限制

smap中的“Private_Dirty”记忆是什么意思?

我有一个巨大的内存消耗Java过程,我正试图弄清楚他正在做什么,所有这些内存。 所以,我正在对这个PID做一个pmap -x,这是一个结果: Address Kbytes RSS Dirty Mode Mapping 0000000000001000 4 0 0 rw— [ anon ] 0000000000400000 48 0 0 rx– java 000000000050b000 4 4 4 rw— java 0000000003b9d000 264 224 212 rw— [ anon ] 0000000003bdf000 2199556 1887992 1830160 rw— [ anon ] 000000396c800000 112 108 0 rx– ld-2.5.so 000000396ca1c000 4 4 4 […]