关于Weblogic Server重启或log rotation导致server.log的i node number变化问

关于Weblogic Server重启或log rotation导致server.log的i node number变化问题

前两天同事问我一个问题,说是客户那边使用Tivoli分析weblogic server日志的时候,每当server重启,Tivoli就出错,说是FileId is changed。当时就怀疑可能跟server log的iNodeNumber有关。因为没怎么仔细看过weblogic server logging的代码,也不是很确认。跟同事说,让客户通过 ls -i 确认一下对应的iNodeNumber。客户反馈说:iNodeNumber没有发生变化,崩溃,文件名没变, iNodeNumber没变,Tivoli说的FileId到底是什么? FileSystem里还有其他标识文件的东西?我有点开始怀疑这个客户了,嘿嘿。 索性,自己做个测试吧。

首先看了看weblogic的代码,log rotation的时候,只是调用了File.renameTo(),如下:

weblogic.loggin.FileStreamHandler.rotateLog()

logFile.renameTo(rotatedFile)

见鬼了, rename完了iNodeNumber还有不变的道理?看看JDK代码再说,

File.renameTo()

1     public boolean renameTo(File dest) {
2                 SecurityManager security = System.getSecurityManager();
3                 if (security != null) {
4                     security.checkWrite(path);
5                     security.checkWrite(dest.path);
6                 }
7                 return fs.rename(this,dest);
8     }

这家伙,还是依赖于FileSystem的,再一看,FileSystem是个抽象类,rename的具体实现肯定跟具体的subclass有关了,只能看看Win32FileSystem吧,

Win32FileSystem.java

1     public boolean rename(File f1,File f2) {
2         // Keep canonicalization caches in sync after file deletion
3         // and renaming operations. Could be more clever than this
4         // (i.e.,only remove/update affected entries) but probably
5         // not worth it since these entries expire after 30 seconds
6         // anyway.
7         cache.clear();
8         prefixCache.clear();
9         return rename0(f1,f2);
10     }
11     private native boolean rename0(File f1,File f2);

好了,现在看到了,rename0()是个native 操作,跟共享库(.dll or .so)又扯上关系了。得, 没有本地库代码,也看不到什么实现了(不过个人感觉,本地实现调用应该是系统函数rename:  int rename(const char *old,const char *new)),只能自己做实现了。写了个小测试程序, 如下:

1 package com.bea.cs.test.file;
2
3 import java.io.File;
4
5 public class FileTest {
6
7     private File src = new File("test");
8
9     public static void main(String args[])
10     {
11         FileTest test = new FileTest();
12         test.run();
13     }
14
15     public void run()
16     {
17         rename("test1");
18     }
19
20     private boolean rename(String name)
21     {
22         boolean ret = false;
23         File dest = new File(name);
24         ret = src.renameTo(dest);
25         /*
26          * as src is renamed to dest,dest should hold the iNodeNumber of src
27          */
28         src = new File("test");
29         try
30         {
31             /*
32              * As has been renamed to dest,src should not exist again
33              * so we should create a new src file,or it will disappear when
34              * test exits. As a new file,src shuold get a new iNodeNumber
35              * that different from it's original value
36              */
37             if(!src.exists())
38                 src.createNewFile();
39         }catch(Exception e)
40         {
41             e.printStackTrace();
42         }
43         return ret;
44     }
45 }

测试的结果如下:

Test Reustlslsol6% ls -il
total 8
6033508 drwxr-xr-x   3 fjin     staff       4096 Sep 26 23:48 com
6033514 -rw-r--r--   1 fjin     staff          0 Sep 26 23:56 test
slsol6% java com.bea.cs.test.file.FileTest
slsol6% ls -il
total 8
6033508 drwxr-xr-x   3 fjin     staff       4096 Sep 26 23:48 com
6033506 -rw-r--r--   1 fjin     staff          0 Sep 27 01:03 test
6033514 -rw-r--r--   1 fjin     staff          0 Sep 26 23:56 test1

现在我这能怀疑客户了, Tivoli报错应该是正常的(Work as design),不过比较纳闷的是:Tivoli为什么要引用FileId,而不是FileName? 开始想改改weblogic的代码,调用类似于 copy的操作,而不是rename。结果没有看到File提供类似的API,而且如果这样做的话,清空原先file内容也是个问题,于是作罢。

时间: 2024-08-28 09:42:09

关于Weblogic Server重启或log rotation导致server.log的i node number变化问的相关文章

怎么设置才能让server重启后,使用sql新建的登录名能自动连接上数据库

问题描述 怎么设置才能让server重启后,使用sql新建的登录名能自动连接上数据库 怎么设置才能让server重启后,使用sql新建的登录名能自动连接上数据库怎么设置才能让server重启后,使用sql新建的登录名能自动连接上数据库 解决方案 你的登录名为aaa的用户有对你网站数据库的访问权限吗?打开SQL Server管理器,安全性->登录名,找到aaa登录名,选中点右键,选择属性,然后在属性的左边选择用户映射,勾上需要访问的数据库.看看这样是否能够解决问题. 解决方案二: 我在winser

SQL SERVER中什么情况会导致索引查找变成索引扫描

SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳.   1:隐式转换会导致执行计划从索引查找(Index Seek)变为索引扫描(Index Scan) Implicit Conversion will cause index scan instead of index seek. While implicit conversions occur in SQL Ser

系统-MapGuide server重启后无法使用

问题描述 MapGuide server重启后无法使用 我在Google Cloud Computer上有个vm, 系统是centos 6.6 MapGuide 2.6(https://mapguide.osgeo.org/)部署在上面运行正常. 但是重启vm之后,MapGuide就没法使用了,登陆页面也看不到了. jdk设置正常, Apache运行正常, Tomcat运行正常, MapGuide可以正常启动. 安装指南(http://mapguide.osgeo.org/GettingStar

SQL Server中TOP子句可能导致的问题以及解决办法

原文:SQL Server中TOP子句可能导致的问题以及解决办法 简介      在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性.      关系数据库中SQL语句只是一个抽象的概念,不包含任何逻辑.很多元数据都会影响执行计划的生成,SQL语句本身并不作为生成执行计划所参考的元数据(提示除外),但TOP关键字却是直接影响执行计划的一个关键字,因此在某些情况下使用TOP会导致性能受到影响,下面我们来

程序导致win7 embedded重启,如何捕捉导致重启的异常?

问题描述 程序导致win7 embedded重启,如何捕捉导致重启的异常? 我在win7 embedded运行一个程序几个小时后会导致系统重启,请问有什么办法可以捕捉导致重启的异常? 谢谢!

asp.net中Server.Transfer重定向到图片导致缓存机制失效解决方法

例如,直接请求图片时服务器响应的HTTP头如下: 引用内容 HTTP/1.1 200 OK Content-Length: 48150 Content-Type: image/jpeg Last-Modified: Tue, 18 Dec 2012 15:01:50 GMT Accept-Ranges: bytes ETag: "e119ee9b30ddcd1:1c48" Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Date: Sat

【转载】/var/log/[messages|syslog|kern.log] 的差别

For the purposes of kernel logging, why do I have three different, non-inclusive levels of logging amongst /var/log/messages, /var/log/syslog, and /var/log/kern.log?  Syslog is a standard logging facility. It collects messages of various programs and

SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍     Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候做了什么事情".具体是指审核SQL Server 数据库引擎实例或单独的数据库涉及到跟踪和记录数据库引擎中发生的事件.它的底层是基于扩展事件(Extented Event),所以其性能和灵活性相对较好.审核数据可以输出到审核文件.Windows安全日志和应用程序日志.     Audit都需

Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙

原文:Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙 原文出处:http://blog.csdn.net/dba_huangzj/article/details/38082123,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349 未经作者同意,任何人不得以"原创"形式发布,也不得已用于商业用途,本人不负责任何法律责任.