Articles of Java的

我如何确定在Linux上是否使用Java或JRuby运行不同的进程ID?

我需要看看给定的进程ID是否正在运行,它必须在Java或JRuby(最好是Ruby解决scheme)中工作。 Linux可以依赖于系统(特别是Debian和/或Ubuntu)。 我已经有我正在寻找的PID,只需要看看它是否正在运行。 更新: 感谢所有人的回应! 我很欣赏它,但它不是什么我正在寻找…我希望在标准的Ruby库(或Java,但最好是Ruby)的东西…如果没有这样的库调用存在,我可能会坚持我已经有了procfs解决scheme。

在Linux上使用Java应用程序的OOM杀手

我在使用500MB RAM的Linux系统(版本2.6.39.2)上的Java应用程序出现问题。 每小时我的应用程序需要更多的1-2MB驻留内存。 应用程序从使用的常驻内存40MB开始。 15天后,OOM杀手杀死我的申请(见附件)。 更多信息: 我没有为我的应用程序设置任何内存限制(无Xms,Xmx,…)。 我使用了396MB的常驻内存,但是对于内存分析工具,我只用了7.8MB的内存,没有发生特殊的内存泄漏。 我能做些什么来find问题的根源,或者如何确保我的应用程序不会被杀死? 在此先感谢您的帮助。 最好的祝福。 编辑:这是一个独立的embedded式应用程序没有服务器。 部署在机器上的应用程序出现问题(难以安装分析工具),但不在我的开发PC上。 Jun 7 06:15:41 HMI user.warn kernel: java invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0 Jun 7 06:15:42 HMI user.warn kernel: Pid: 650, comm: java Not tainted 2.6.39.2 #7 Jun 7 06:15:42 HMI user.warn kernel: Call Trace: Jun 7 06:15:42 HMI user.warn kernel: [<c144c264>] […]

在Applet中显示中文文本

我们有一个Applet可以显示中文文本。 我们正在为它指定一个字体(Arial),它在Windows和Mac OSX下工作正常。 但在Linux上的Firefox中,中文字符呈现为正方形。 有没有办法解决这个问题? 请注意,我们不能假定客户端上存在特定的字体文件。

.War在Windows上部署但无法在Linux服务器上部署(Tomcat 7)

正如标题所介绍的,我试图使用Tomcat 7部署的.War文件不能在运行Linux的机器上运行。 它可以在Windows上运行,当然也可以在Tomcat 7上部署。 我试图单独追踪这个问题,并在网上search相关的问题,包括这个论坛,迄今为止没有成功。 这就是为什么我创build这个线程寻求帮助/提示。 我跟踪的错误消息如下: Sep 14, 2015 4:46:05 PM org.apache.catalina.deploy.NamingResources cleanUp WARNING: Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SmartHomeReasoner]] so no cleanup was performed for that container javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context. Unable to find [comp]. at org.apache.naming.NamingContext.lookup(NamingContext.java:819) at org.apache.naming.NamingContext.lookup(NamingContext.java:167) at org.apache.catalina.deploy.NamingResources.cleanUp(NamingResources.java:986) at org.apache.catalina.deploy.NamingResources.stopInternal(NamingResources.java:968) at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) […]

Java下的stream程创build过程如何?

在24核的服务器上,我有一个单一的大堆(最多240GB,尽pipe在这个阶段的大部分时间里,在20-40GB的范围内)运行在Linux [2]下的JVM [1]。 我们有成千上万个必须由外部可执行文件处理的对象,然后将由这些可执行文件创build的数据加载回JVM。 每个可执行文件产生约半兆字节的数据(在磁盘上),当读取正确时,在该过程结束之后,当然是更大的。 我们的第一个实现是让每个可执行文件只处理一个对象。 这涉及到产生两倍的可执行文件,因为我们有对象(因为我们调用了一个叫做可执行文件的shell脚本)。 我们的CPU利用率将从高开始,但不一定是100%,并且会慢慢恶化。 当我们开始测量以查看发生了什么事情时,我们注意到过程创build时间[3]不断减慢。 在亚秒时间开始时,最终会花费一分钟或更长的时间。 可执行文件所做的实际处理通常不到10秒钟。 接下来,我们更改可执行文件以获取要处理的对象列表,以减less创build的进程数量。 批量大小为数百(约为我们现有样本量的1%),stream程创build时间约为2秒,增长到5至6秒。 基本上,为什么创build这些stream程需要很长时间才能继续执行? [1] Oracle JDK 1.6.0_22 [2]红帽企业Linux高级平台5.3,Linux内核2.6.18-194.26.1.el5#1 SMP [3]创buildProcessBuilder对象,redirect错误stream并启动它。

Selenium Server在使用SIGTERM处理后不会绑定到套接字

被杀一次后,selenium服务器挂在所有进一步的创业,甚至没有试图获得服务器端口。 重新启动解决了这个问题。 以不同的用户身份运行,selenium也会重新启动,但在该进程被终止后,将无法再运行。 这是在VirtualBox虚拟机中的Linux 2.6.32-5-amd64(debian squeeze)上。 查看系统调用的日志,当它调用的时候,一些组件似乎在套接字被绑定之前locking。 selenium日志不是很有帮助。 输出也没有给出任何指示: $ java -jar selenium-server-standalone-2.28.0.jar Dec 27, 2012 5:41:35 PM org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server 17:41:35.703 INFO – Java: Sun Microsystems Inc. 14.0-b16 17:41:35.704 INFO – OS: Linux 2.6.32-5-amd64 amd64 17:41:35.737 INFO – v2.28.0, with Core v2.28.0. Built from revision 18309 17:41:35.867 INFO – RemoteWebDriver […]

面向仍然运行Java的演示系统的小型Linux发行版

我正在寻找一个非常小的Linux发行版的build议,我可以在VirtualBox中运行,而不杀死主机系统,也可以运行最新的Sun / Oracle-Java。 除了Postgres和一个文本编辑器,我不需要任何其他东西。 我失去了数以百万计的不同发行版,但也许你们中的一些人已经在向销售机器人部署类似的东西了?

用shell脚本启动和杀死java应用程序(Debian)

我是UNIX的新手。 我想用这样的脚本启动我的Java应用程序: #!/bin/sh java -jar /usr/ScriptCheck.jar & echo $! > /var/run/ScriptCheck.pid 这应该是工作。 它确实运行了应用程序,它确实写入了pid文件。 但是当我尝试用包含以下内容的不同脚本来停止进程: #!/bin/sh kill -9 /var/run/ScriptCheck.pid 控制台给了我这个错误: bash: kill: /var/run/ScriptCheck.pid: arguments must be process or job IDs 我最好的猜测是,我没有在停止脚本中写入正确的代码,也许没有给出正确的命令来打开.pid文件。 任何帮助将非常感激。

JDK可以使用apt-get install吗?

我一直在使用一台Linux机器不到两个星期,所以我对Linux非常陌生。 我也想安装Java开发工具包。 这应该怎么做? 有没有apt-get命令,还是只要点击Sun网站上的下载button? 我确信有多种方法可以做到这一点,这可能没有太大的关系,但是在安装PHP和MySQL时apt-get install工作的顺利性给我留下了深刻的印象,所以如果有正确的做法这个,我想知道。 我正在使用Ubuntu版本9.04

如何在C和Java中产生cpucaching效果?

在Ulrich Drepper的论文中,每个程序员应该知道关于内存的知识 ,第三部分:CPU Caches,他显示了一个图表,显示了“工作集”大小和每个操作(在本例中为连续读取)消耗的CPU周期之间的关系。 图中有两个跳转指示L1caching和L2caching的大小。 我写了自己的程序来重现c中的效果。 它只是从头到尾依次读取一个int []数组,并且我尝试了不同的数组大小(从1KB到1MB)。 我将数据绘制成graphics,没有跳跃,graphics是一条直线。 我的问题是: 我的方法有问题吗? 产生cpucaching效果的正确方法是什么(查看跳转)。 我在想,如果是连续读取,那么它应该像这样操作:当读取第一个元素时,它是一个caching未命中,并且在caching行大小(64K)内,会有命中。 在预取的帮助下,读取下一个caching行的延迟将被隐藏。 即使工作集大小超过L1高速caching大小,它也会连续读取数据到L1高速caching中,它将驱逐最近最less使用的数据,并继续预取。 因此,大部分caching未命中都将被隐藏,从L2获取数据所消耗的时间将被隐藏在阅读活动之后,这意味着它们同时运行。 assosiativity(在我的情况下是8)将隐藏从L2读取数据的延迟。 所以,我的程序现象应该是正确的,我错过了什么? 是否有可能在java中获得相同的效果? 顺便说一下,我在linux中这样做。 编辑1 感谢Stephen C的build议,这里有一些额外的信息:这是我的代码: int *arrayInt; void initInt(long len) { int i; arrayInt = (int *)malloc(len * sizeof(int)); memset(arrayInt, 0, len * sizeof(int)); } long sreadInt(long len) { int sum = 0; struct timespec tsStart, tsEnd; […]