PostGreSQL数据库检查(5)

记得研究手机接入LifeRay导致Log文件大量增长、内存超限导致Hang Up时,有一篇博客说的很到位。


站在巨人的肩膀上总是会很让人兴奋和增加能量。向高手学习可以快速成为高手。必要的时候花点钱可以节约大量时间。



于是今天又找到了它。这是一系列的LifeRay文章,作者:胡启稳 15925232137 QQ:68304399 。他的网站如下,名称是:IT人生录



其中30篇关于LifeRay的文章在此:


http://www.huqiwen.com/category/technology-share/liferay/


对应的付费教程如下:



今天开始研究LifeRay, 先Shutdown这个Tomcat,再重启。

用“tail -f catalina.out”来监控其过程。


一上来就遇到问题。“./ shutdown.sh” 和“shutdown.sh” 在root下都不能运行。因为第一个多了个空格,第二个找不到文件(并不是当前目录就可以运行当前目录下的文件)。然后正确运行了,花了大约10秒钟。如下:


然后又重启Tomcat,这个过程需要时间比较长,约2分钟,一直等到“Server startup in 105990ms”才算完成。如下:


再Access网站,出来了问题。很好,就是需要问题出现。


网站显示如下。说明Tomcat可以起来,而且能接受访问,但是网站启动过程中有问题。


再看BCE监控,如下,内存用量下去了:


此时,把数据库做了一个备份,同时把LifeRay的文件目录做了一个备份。都在/CDS2下面。

1.7G的大文件不好处理,把末尾部分单独写一个文件。如下文所述:


<span style="font-size:14px;">http://www.linuxdiyf.com/viewarticle.php?id=111240</span>
问题: 有个3G文本,要作处理,每次测试消耗太多资源。因此,代码测试过程中应该做小规模的运行。通常做法是从原文本中提取一部分,例如前100行。 解决方法: 利用linux下的head命令可以轻松解决问题,同时利用管道。代码如下:head filename -n 100 > newfile说明: 很容易想到,上面是取头100行,如果取尾100行,则可以用tail,利用head和tail的组合也可以取文件中的任意一段。以下是一些范例:tail filename -n 100 > newfile


尝试用Beyond Compare比较两个log文件,太大,把它终止掉。裁剪了部分Log发到我的邮箱里。然后发现网站问题更大了:

继续研究这个问题。将PostGreSQL数据库做了备份。比较正常和故障时的两个数据库备份的Plain文件,只有两处不同,而且看起来肯定不是什么问题。并且,在pdAdmin III中直接恢复数据库是不行的。估计需要删掉所有原有数据才能去恢复备份的数据(这个需要进一步研究)。


于是又开始查看LifeRay的Log文件,实际上是Tomcat的Log文件。比较正常时的和故障时的,从实质性的不同处,一开始出现如下问题:


<span style="font-size:14px;">05:28:11,938 ERROR [localhost-startStop-1][Cache:120] Unable to set localhost. This prevents creation of a GUID. Cause was: david.novalocal: david.novalocal: unknown error
java.net.UnknownHostException: david.novalocal: david.novalocal: unknown error</span>

看来是hostname的问题,网上提到去修改/etc/hosts加上不识别的名称就好。发现该文件里面已经有了一行“127.0.0.1 davidqi.novaloal”。这不是已经有了吗?于是就往里又写了一行一模一样的“127.0.0.1 davidqi.novaloal”。重新启动服务器,问题还是在那里。


那问题究竟在哪儿呢?


晚饭后,就这个问题问了我的一个同事,他让我ping一下这个hostname。我又打入hostname指令,答复是david.novalocal。然后ping david.novalocal,答复是:unknown host name. 奇怪!我明明在/etc/hosts里面写入了呀。仔细一看,原来已有和又写入的是:“127.0.0.1 davidqi.novaloal”,而需要的是:“127.0.0.1 david.novaloal”!!!相差“qi”两个字母!!!


于是修改了它。然后重启服务器。然后就好了!而且服务器使用的内存量也降下去了!




一通百通,其他的服务器景象也是同一个问题,选了一个日期最靠后的,改完/etc/hosts后,重启服务器,一切正常!


困扰我几个月的看起来非常复杂的问题,为了解决这个问题,博客写了5篇,从2015-10-09一直研究到今天(2015-10-19),历时11天,学习的PostGreSQL数据库及其备份,备份的三种文件类型,pgAdmin III,Beyong Compare文件比较软件,大量实用的Linux基础知识和一些技巧,百度云CDS的购买和挂载、使用,LifeRay的数据库的组成和结构、数据,等等。问题对应的描述错误的Log有近千行。


最后仅仅通过在/etc/hosts文件中减少两个字母就彻底解决了。错误log烟消云散!


大笑大笑大笑

============================================================

高兴之余,还是要研究一下问题的根源在哪里。恢复了最后的和最前的服务器镜像,都有这个问题。最早的镜像恢复后,需要手动启动数据库和LifeRay。修改/etc/hosts后,正常启动后如下:


既然最早的镜像都有问题,那怎么能一直坚持到那么长时间呢?于是检查第二个服务器镜像,这个应该是关键。

用hostname检查,答复是david。reboot之后,变成了david.novalocal,然后就出现了问题。hostname怎么会自己就变了呢?应该是未记录的更改。具体待查。

==========================

2015-10-21 记录:


catalina.out(7G)和liferay.log.2015-10-20.txt 拷贝到了./mnt下面备查。因为增长太快。需要仔细查看一下。


./shutdown.sh和./startup.sh执行了2次,每次都正确启动了LifeRay。


查看一个目录下子目录及其下属所有目录的总大小,用以下命令:


du -sh *


百度的服务器临时数据盘是RAID6的,CDS是: 云磁盘的数据采用实时多副本存储,部分存储节点、存储介质或网络交换机故障时,数据会立即迁移到其它节点,数据的访问不会受到任何影响,不会感觉到组件故障。同时支持CDS实例的随时快照备份和回滚恢复,因此云磁盘的可用性和可靠性更高。。

=================================

恢复到了auto_startup镜像以检查domainname,etc.

./etc/hosts里面没有david.novalocal,如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 centos6u5.x86-64
127.0.0.1 c64zcs2
127.0.0.1 c64zcs2
127.0.0.1 c64zcs1
127.0.0.1 c64zcs1
127.0.0.1 c64zcs1
127.0.0.1 davidqi
127.0.0.1 davidqi.novalocal
127.0.0.1 david

./etc/sysconfig/network里面有

NETWORKING=yes
HOSTNAME=david.novalocal

把network里面的删掉HOSTNAME=david.novalocal重启看看。重启后登录界面显示的是david。但是登录不进去,网站也无法访问。


恢复run_10days_OK, 登录界面显示的是david.novalocal,网站不能正常运行。把network里面的改成HOSTNAME=david重启看看。重启后登录界面显示的是david,网站还是可以正常运行。


以上验证过程说明:Linux服务器的hostname是由./etc/sysconfig/network文件里面的定义来确定的。但是LifeRay严重依赖./etc/hosts里面的清单来进行它的启动运行。在这个./etc/hosts文件中如果缺少和./etc/sysconfig/network文件里面的定义的hostname相同的hostname的定义,则LifeRay不能正常启动起来。


./etc/hosts文件的作用相当于本地的DNS服务器。


(/proc/sys/kernel/hostname的用途是运行时态的hostname,是实时的,可以实时修改,但是系统重启后不能持续存在。)


以下文章对hostname的解释比较全面和正确。以它作为本章博客的结束。


http://soft.chinabyte.com/os/281/11563281.shtml


部分截屏如下:


linux的hostname修改详解

发布时间: 2010-09-28 00:00:00 来源: 中国IT实验室 作者: 佚名
关键字: Linux

  Linux操作系统的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname。也可以直接cat /proc/sys/kernel/hostname查看。

  #hostname

  #cat /proc/sys/kernel/hostname

  上面两种输出结果相同。

  修改运行时Linux系统的hostname,即不需要重启系统

  hostname命令可以设置系统的hostname

  #hostname newname

  newname即要设置的新的hostname,运行后立即生效,但是在系统重启后会丢失所做的修改,如果要永久更改系统的hostname,就要修改相关的设置文件。

  永久更改Linux的hostname

  man hostname里有这么一句话,”The host name is usually set once at system startup in /etc/rc.d/rc.inet1 or /etc/init.d/boot (normally by reading the contents of a file which contains the host name, e.g. /etc/hostname).” RedHat里没有这个文件,而是由/etc/rc.d/rc.sysinit这个脚本负责设置系统的hostname,它读取/etc /sysconfig/network这个文本文件,RedHat的hostname就是在这个文件里设置。

  所以,如果要永久修改RedHat的hostname,就修改/etc/sysconfig/network文件,将里面的HOSTNAME这一行修改成HOSTNAME=NEWNAME,其中NEWNAME就是你要设置的hostname。

  Debian发行版的hostname的配置文件是/etc/hostname。

  修该配置文件后,重启系统就会读取配置文件设置新的hostname。

  hostname与/etc/hosts的关系

  很过人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。

  hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。具体可以man hosts。

  Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录

  127.0.0.1 localhost.localdomain localhost

  hosts文件格式是一行一条记录,分别是IP地址 hostname aliases,三者用空白字符分隔,aliases可选。

  127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。

  修改hostname后,如果想要在本机上用newhostname来访问,就必须在/etc/hosts文件里添加一条newhostname的记录。比如我的eth0的IP是192.168.1.61,我将hosts文件修改如下:

  #hostname blog.infernor.net

  # cat /etc/hosts

  127.0.0.1 localhost.localdomain localhost

  192.168.1.61 blog.infernor.net blog

  这样,我就可以通过blog或者blog.infernor.net来访问本机。

  从上面这些来看,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来访问自己的时候才会用到/etc/hosts文件。两者没有必然的联系。

  RHEL还有个问题。

  我开始在测试的时候,只修改/etc/hosts,里面添加 192.168.1.61 blog.infernor.net blog,而/etc/sysconfig/network维持原状,也就是里面的HOSTNAME=localhost.localdomain。我重启系统后居然发现hostname给修改成了blog.infernor.net。这样看的话,倒真觉得/etc/hosts是hostname的配置文件。后来终于在/etc/rc.d/rc.sysinit这个启动脚本里发现了问题的所在。

  rc.sysinit文件里一开始就设置了hostname

  if [ -f /etc/sysconfig/network ]; then

  . /etc/sysconfig/network

  fi

  if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then

  HOSTNAME=localhost

  fi

  确实使用了/etc/sysconfig/network里的hostname值。不过后面还有一段关于设置hostname的

  ipaddr=

  if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]

  ; then

  ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet

  / { print gensub("/.*","","g",$2) }')

  if [ -n "$ipaddr" ]; then

  eval $(ipcalc -h $ipaddr 2>/dev/null)

  hostname ${HOSTNAME}

  fi

  fi

  脚本判断hostname是否为localhost或者localhost.localdomain,如果是的话,将会使用接口IP地址对应的 hostname来重新设置系统的hostname。问题就出在这里,我的/etc/sysconfig/network默认的hostname是 localhost.localdomain,eth0的IP是192.168.1.61,而/etc/hosts里有192.168.1.61的记录。于是就用192.168.1.61这条记录来替换了hostname。

  估计这也是很多人将/etc/hosts误以为是hostname的配置文件的原因。

  hostname带选项查询

  hostname的-s -f -i等等选项都用到了/etc/hosts或者DNS系统,跟我们讨论的hostname有点远了,也容易产生误会。具体可以man hostname查看。










































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值