Articles of Java的

如何告诉Java运行这个Runtime.getRuntime()。exec,而不必等待它运行的命令,只需在后端运行它?

如何让Runtime.getRuntime().exec(p)运行而不用等待睡眠10? 目前它是错误的,它等待执行完成,然后移动到下一个。 我需要在飞行中让exec运行,以便10秒后它可以杀死PresentationInProjector.jpg。 Example: Runtime.getRuntime().exec("(sleep 10; echo '09|00|CC|01|83|88' | nc localhost 58888) &"); PlayThisSlideShow("PresentationInProjector.jpg");

Tomcat本身closures

我在CentOS 6.5 64位和OpenJDK 1.7 64上运行Tomcat 7.0.53。 偶尔有几台服务器 – 像每周一次随机的 – Tomcat只会优雅地closures。 我一直在看这个月,找不到原因。 唯一的模式似乎是closures的一段长时间没有进行。 我已经升级到最新版本的底层工具(Tomcat,Java等) 我正在运行默认的内存设置 我已经禁用server.xml中的SHUTDOWN 我已经将MySQL移动到另一个框,以确保Tomcat是唯一的实质应用程序(服务器也运行nginx) 我已经validation,我没有System.exit()在我的任何代码。 我没有扫描库,因为我不知道如何做到这一点。 我也不指望我会在那里find任何东西。 为什么图书馆会退出? 我已经启用垃圾回收日志logging。 但是他们看起来相当快 – 就像在0.15s的全面GC 这是其中一台服务器的内存使用情况。 大量的RAM免费。 total used free shared buffers cached Mem: 2006 771 1234 0 176 281 -/+ buffers/cache: 313 1692 Swap: 2047 0 2047 以下是Catalina.out中的其中一项活动。 你可以看到它开始,然后几个小时没有什么令人兴奋的。 然后优雅地关上,仿佛被告知。 我已经研究这个死亡,并没有蜜蜂能够处理这一点。 有人能为我提出一个行动计划吗? 谢谢 从Server.xml中: […]

Java中的文件path(Linux)

我已经创build了一个Java应用程序,从一个位于src/文件夹中的文件conf.properties中加载一些configuration。 当我在Windows上运行这个应用程序,它完美的作品。 但是,当我尝试在Linux上运行它时,会引发这个错误: java.io.FileNotFoundException: src/conf.properties (No such file or directory)

Linux下的Java守护进程:select?

我有一个控制台应用程序(用Java编写),应该在Linux机器上运行,直到它停止。 日志logging由应用程序本身完成。 只要有新版本可用(即我login,停止应用程序,复制新的JAR文件,然后再次启动),应用程序需要停止。 除了下面指定的选项之外,还有哪些select可以实现? 已知的方法来做到这一点: 1)Tanuki服务包装 2)nohup java -jar myapp-1.32.jar&

Java内存的奥秘(我有泄漏)?

我有一个独立的Java问题在Linux服务器上运行。 我用-Xmx256m开始了jvm。 我附加了一个JMX监视器,可以看到堆永远不会真的通过256Mb。 但是,在我的Linux系统上运行顶层命令时,我可以看到: 1)首先,这个过程的RES内存使用量约为350Mb。 为什么? 我想这是因为堆外的记忆? 2)其次,这个过程的VIRT内存使用量正在不断增长和增长。 它永远不会停止! 现在显示在2500Mb! 所以我有泄漏? 但堆不增加,它只是循环! 最终,这会造成一个问题,因为系统交换不断增长,最终导致系统死亡。 任何想法是怎么回事? 我想问的一个重要问题是,这可能是我的代码的结果,而不是JVM,内核等的一些情况。例如,如果线程的数量不断增加,那么是否符合我的观察的描述? 任何类似的东西,你可以build议我留意?

Netty 4在Linux上接收多播数据包

我写了一个应用程序接收发件人发送的组播数据包(包含audio)。 我已经使用Netty 4,并已经在Windows上运行该应用程序,但是在Linux(Debian Wheezy(raspi)和Ubuntu 12)上运行时,它不会收到多播数据包。 我创build了一些可以发送和接收多播数据包的testing代码,结果是: 发送Windows到Windows的作品。 发送Linux到Windows的作品。 发送Windows到Linux,数据包发送但没有收到。 我以root身份运行该应用程序,并将SO_BROADCAST设置为true。 我错过了什么? 如果我使用标准的Java MulticastSocket而不是Netty,那么这个应用程序就可以工作,但是我更喜欢使用Netty,因为它很容易使用并且大大简化了代码。 testing代码是: public class TestMulticast { private int port = 51972; private Logger log = Logger.getLogger(this.getClass()); private InetAddress remoteInetAddr = null; private InetSocketAddress remoteInetSocket = null; private InetAddress localInetAddr = null; private InetSocketAddress localInetSocket = null; private DatagramChannel ch = null; private EventLoopGroup […]

Java Runtime.getRuntime()。exec()带引号

我试图通过在Linux上的EXEC调用运行ffmpeg。 但是我必须在命令中使用引号(ffmpeg需要它)。 我一直在寻找通过java文档的processbuilder和执行和问题在stackoverflow,但我似乎无法find一个解决scheme。 我需要跑步 ffmpeg -i "rtmp://127.0.0.1/vod/sample start=1500 stop=24000" -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv 我需要在下面的参数string中插入引号。 注意,由于processbuilderparsing和运行命令的本质,简单地在反斜杠之前添加单引号或双引号不起作用。 String argument = "ffmpeg -i rtmp://127.0.0.1/vod/" + nextVideo.getFilename() + " start=" + nextVideo.getStart() + " stop=" + nextVideo.getStop() + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv"; 任何帮助将不胜感激。

在生产环境中保护密码

我们有一个运行在JBoss和Linux上的Java Web应用程序。 生产环境数据库连接参数来自只存在于生产环境应用程序服务器上的configuration文件。 该configuration文件只能由运行应用程序的用户ID读取(我们称之为用户appuser),唯一可以login到生产环境服务器的人员以及sudo到appuser是我们运营团队的成员。 生产环境本身被所有其他环境所阻挡。 我们想让这个更安全。 具体而言,我们希望防止操作团队读取configuration文件中当前的数据库连接密码和其他密钥。 另一个需要记住的因素是操作团队负责构build和部署应用程序。 我们有什么select? 该解决scheme需要支持手动重启应用程序,以及在操作系统重启时自动启动应用程序。 更新 我现在正在调查的解决scheme(向Adamski提出他的build议,大致转化为步骤1): 编写一个setuid包装器可执行文件给启动/停止应用程序的用户,并拥有JBoss目录树中的configuration文件和所有内容。 build造后使用jarsigner来签署WAR。 战争的build设将通过发展来完成。 setuid包装将validation签名,validationWAR没有被篡改。 将部署过程更改为仅部署已签署的WAR。 setuid包装器也可以将WAR移动到JBoss deploy目录中。

ant:warning:编码UTF8的不可映射字符

我看过很多像我这样的问题,但是他们不回答我的问题,因为我使用的是ant,而且我没有使用eclipse。 我运行这个代码: ant clean dist ,它告诉我无数次warning: unmappable character for encoding UTF8 。 我看到在Java命令中有一个-encoding选项,但是这并不能帮助我因为我使用的是ant。 我在Linux上,我试图运行Sentrick的开发版本; 我没有做任何修改,我只是下载它,并按照他们的指示 ,这不是没有什么区别。 我发邮件给开发者,他们告诉我这是个问题,但是我怀疑这个问题实际上是在这个错误的结尾: BUILD FAILED /home/daniel/sentricksrc/sentrick/build.xml:22: The following error occurred while executing this line: /home/daniel/sentricksrc/sentrick/ant/common-targets.xml:83: Test de.denkselbst.sentrick.tokeniser.components.DetectedAbbreviationAnnotatorTest failed 我不知道我现在要做什么,因为我真的需要它的工作

如何在Linux中签署Mac OS X应用程序?

对于OS X,我将我的Java应用程序分发到DMG中。 自Mountain Lion发布以来,打开应用程序给出了以下错误信息: [应用程序名称]已损坏,无法打开。 您应该popup磁盘映像。 显然,修复是签署.app文件,所以我阅读了代码签名指南 。 除了如何将这个function集成到我的一键构build过程这个重要的问题之外,一切似乎都很简单。 在所有平台上构build我的产品发生在我的Linux开发机器上。 我运行一个Ant脚本,并安装了Windows安装程序,初学者EXE,Linux安装程序,OS X应用程序和DMG。 所以我想将代码签名集成到这个过程中。 是否有相当于Linux的“codesign”?