0

catalina.sh里

JAVA_OPTS="-server -showversion -Xms10240m -Xmx10240m -XX:+PrintGC -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -Xloggc:../logs/tomcat_gc.log" 

用jcmd查看

./jcmd  13735  VM.flags 
13735: 
-XX:CICompilerCount=4 -XX:InitialHeapSize=10737418240 -XX:MaxHeapSize=10737418240 -XX:MaxNewSize=697892864 -XX:MaxTenuringThreshold=6 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=697892864 -XX:OldPLABSize=16 -XX:OldSize=10039525376 -XX:ParallelGCThreads=8 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseFastUnorderedTimeStamps -XX:+UseParNewGC 

运行后,却发现 logs目录下没有tomcat_gc.log
但是如果把

 -Xloggc:../logs/tomcat_gc.log

中../logs/tomcat_gc.log改成绝对路径就没问题。
可是我在bin路径下

  ls ../logs/

没问题的啊
怎么回事啊?

2个回答

0

首先, 问题的主要原因是当前工作目录可执行文件的位置之间的差异。要知道, Linux 中当前的工作目录不是可执行文件所在的目录, 而是启动程序的当前目录。

例如, 假设您有一个程序current, 它打印出当前目录, 并且它位于/home/user/script中。

如果执行此操作:

cd /home/user/script
./current

它将打印出来工作目录:/home/user/script/但是, 如果你这样做:

cd /home/user/
script/current

输出工作目录将是:/home/user/

你的配置在不同目录下启动tomcat会有完全不一样的效果,如看来,绝对路径是更好的选择。

0

原因正如 @Yujiaao 说的, 因为相对路径的问题.
但是使用绝对路径以后移动目录也很麻烦, 你可以在 tomcat/bin 目录下新建一个 setenv.sh 文件, 然后把这些配置放到 setenv.sh 中. 在这个文件可以使用 $CATALIAN_HOME 引用tomcat启动的路径. 比如:

JAVA_OPTS="-server -showversion -Xms10240m -Xmx10240m -XX:+PrintGC -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -Xloggc:$CATALINA_HOME/logs/tomcat_gc.log" 

相关信息参考 bin/catalian.sh 文件里的说明

clipboard.png

撰写答案