给定一个压缩的存档文件,例如application.tar.gz其中包含一个文件夹application/x/y/z.jar,我希望能够使用我的最新版本z.jar并使用它更新/刷新存档.
除了以下之外,还有办法做到这一点吗?
tar -xzf application.tar.gz
cp ~/myupdatedfolder/z.jar application/x/y
tar -czf application application.tar.gz
Run Code Online (Sandbox Code Playgroud)
我知道-utar中的开关可能有用,以避免解开整个事情,但我不确定如何使用它.
我们最近开始的一个应用程序偶尔会崩溃,并显示一条消息"java.lang.OutOfMemoryError:Chunk :: new请求8589934608字节.交换空间不足?".
我在网上四处看看,到处都有建议
恢复到以前的版本意味着新的Java有一个bug,但我没有看到任何迹象.记忆根本不是问题; 服务器有32GB可用,Xmx设置为20而Xms为10.我看不到JVM耗尽剩余的12GB(少于给予机器上其他一些进程的数量).由于应用程序和环境的性质,我们一直处于服务器模式.
当我查看应用程序的内存和CPU使用情况时,我看到一整天的内存使用量不变,但是在它崩溃之前突然发生CPU使用率上升到100%并且内存使用率从X增加到X + 2GB,到X + 4GB,到(有时)X + 8GB,到JVM死亡.似乎在JIT编译中可能存在重复数组调整大小的循环.
我现在已经看到上述8GB请求和16GB请求发生错误.所有这些,当发生这种情况时编译的方法是相同的.这是一个简单的方法,它具有非嵌套循环,没有递归,并且在对象上使用方法,这些方法直接返回静态成员字段或实例成员字段,只需很少的计算.
所以我有两个问题:
@StephenC
JVM是1.6.0_20(以前是1.6.0_0),在Solaris上运行.我知道这是由于几个原因造成问题的汇编.
ps 在它前面的秒中显示一个id为与编译器线程对应的java线程(来自jstack)占用了100%的CPU时间jstack 显示问题在于 JavaThread "CompilerThread1" daemon [_thread_in_native, id=34, ...]提到的方法jstack总是相同的,是我们写的方法.如果您查看示例jstack输出,您将知道我的意思,但由于显而易见的原因,我无法提供代码示例或文件名.我会说这是一个非常简单的方法.基本上是一些空检查,2个用于执行相等性检查并可能分配值的循环,以及之后的一些简单方法调用.总而言之,可能有40行代码.
虽然应用程序每天运行并且每天重新启动,但这个问题在2周内发生了2次.此外,应用程序在任何这些时间都没有处于高负荷状态.