在IPFire
下一直提示更新失败,于是登录SSH
,测试一下网络,发现无法解析域名
解决方法就是,编辑域名配置文件
添加一个域名解析服务器即可
在IPFire
下一直提示更新失败,于是登录SSH
,测试一下网络,发现无法解析域名
解决方法就是,编辑域名配置文件
添加一个域名解析服务器即可
serialVersionUID的作用
详见这篇文档 http://lenjey.iteye.com/blog/513736
简单来说就是,在序列化对象时,编译器会自动给对象生成一个serialVersionUID,之后任意改动这个对象都会与编译器生成的UID不匹配。如果我们显示指定了serialVersionUID,那么对象序列化之后,也可以修改这个对象。
serialVersionUID生成
我们可以任意指定serialVersionUID,如
但最好还是使用让系统按照摘要算法生成一个指纹数字。eclipse是可以自动生成的,IDEA需要简单配置一下。
IntelliJ IDEA->Preferences->Inspections界面下
Serializable class without serialVersionUID后打钩,注意上面的Profile选为Default。
(继承了Serializable的类没有serialVersionUID就会Warning)
之后光标在继承了Serializable的类名上按 ALT+ENTER键,就会出现 Add serialVersionUID field 选项,生成的UID如下
在配置nginx
做实验时配置错了,导致访问不了虚拟主机。一狠心把nginx
的配置文件目录(/etc/nginx
)都删除了,而且我没有备份这些配置文件,因此想重装nginx
。
本来以为直接使用如下apt-get
指令
就可以搞定,但实际上并没有有自动产生nginx
的配置文件,连/etc/nginx
目录都没产生。
于是autoremove
提示
虽然产生了/etc/nginx
目录了,但只有部分配置文件
于是
罗列出与nginx
相关的软件
然后卸载并重新安装
nginx配置失败,卸载后重装出问题 awk: cannot open /etc/nginx/nginx.conf (No such file or directory),nginxawk
在Windows 7
中开程序的人来说,也许会发现DebugView
在Win7
中无法查看OutputDebugString
所抛出的消息,
这对像Timer
或者是连续发生的(Event
)事件(比如:OnPaint
或Mouse
移动等Event
)进行DEBUG
非常不方
便,也许这是微软为了安全原因考虑,所以把此功能给关闭。
※如果要打开此功能,请依照如下步骤进行:
1.打开注册表(在Run -> regedit)。
2.打开这个键:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]。
3.建立[Debug Print Filter]这个新键。
4.新增加一个“DEFAULT”的DWORD值,将其内容设置0x0f,如下图所示:
5.重启OS后生效。
这样以后你就可以使用OutputDebugString
来输出信息了。
图方便的话,直接下载注册表文件 OutputDebugString 下载并解压缩后,双击导入即可。
今天,尝试从 https://git-for-windows.github.io/ 更新msysgit
到最新版本的时候,发现下载链接 https://github.com/git-for-windows/git/releases/download/v2.12.0.windows.1/Git-2.12.0-64-bit.exe被服务器重新定向到了亚马逊的服务器上去了,最后的下载地址是github-cloud.s3.amazonaws.com
的某台机器上。但是国内访问亚马逊,基本上没办法下载成功的,很可能是被墙了。
搜索了一下,发现可以通过设置host
,强制把访问节点从美国定向到香港的办法来解决这个问题。Windows
下,编辑C:\Windows\System32\drivers\etc\hosts
然后增加如下解析即可。
对于Linux
以及macOS
,则修改/etc/hosts
。
github release 的github-cloud.s3.amazonaws.com实在太慢,下载老在10几k徘徊
今天(2017.02.27)TortoiseGit 2.4.0
发布了一个Hotfix
来修正几个BUG
,网站上的具体的版本信息如下:
2017-02-25 | Released TortoiseGit Hotfix 2.4.0.2 (fixes issue #2909 (Commit dialog unclosable) and issue #2911 (Add returns "invalid path") and contains PuTTY 0.68)
但是这次的修复引入了更大的BUG
,导致无法提交代码,不管是拉取还是提交代码,都会提示"fatal: protocol error: bad line length character: Welc
",如下图:
修复这个问题最简单的方法就是还原到TortoiseGit 2.4.0
版本。
这个BUG
是由TortoiseGitPlink.exe
里面的代码改动引起的,只要还原这个文件到0.67版本(来自TortoiseGit 2.4.0
),也可以解决这个问题。
目前已经提交了BUG
给开发人员了。对于的BUG
链接地址如下:
TortoiseGit 2.4.0.2 bug ( TortoiseGit 2.4.0 works but TortoiseGit 2.4.0.2 can not pull and push) "fatal: protocol error: bad line length character: Welc"
希望能尽快修复这个问题吧!
到目前为止(2017.05.09)这个问题依旧没有修复的可能,因此建议大家可以改用一下SourceTree-2.0.20.1
,可以点击这里下载目前最新的版本。
~/.bashrc
里面的一些设置,比如alias
命令的设置“不起作用”,新开一个终端都要source
一下才起作用。
unix
下当shell
是login shell
,.bash_profile
才会加载,而bashrc
正好相反。
真正的区别是在linux
下,当用户登录到一个图形界面,然后打开一个终端terminal
,那些shell
是non-login shell
。
然而,在OS X
登录的时候,并没有运行着一个shell
,所以,在运行Terminal.app
的时候,其实那是一个login shell
。
后来新建了.bash_profile
加载一次.bashrc
.
Jdom的XmlOutputter默认生成的文件不带换行,所有key-value对写在一行里,使用起来很不方便,XmlOutputter支持设置换行。
jdom1.0中写法如下
XmlOutputter xmlOut = new XmlOutputter(" ", true, "utf-8");
三个参数分别为,缩进(这里是两个空格),是否换行,字符编码
jdom1.0以后不支持上面的写法,而是把三个参数剥离出来,形成了Format类
Apache 2.4
版本开始已经尝试借鉴Nginx
的实现方式来处理网络连接。但是到目前(2017.2.22)为止,实现的并不彻底,只是在处理HTTP
协议的时候使用异步模式,而处理HTTPS
协议的时候,依旧使用每个连接一个线程的模式。据说完整的支持HTTPS
异步,要到Apache 3.x
版本了。
目前的Apache MPM event
本质上还是Apache MPM worker
的优化版本,并不是一个完整的独立模式。
尽管支持的不是太完善,但是这部分的实现,已经能比较好的改善Apache 2.4
的网络处理性能了,尤其是对于我这种访问压力不是太大的网站来说,目前应该是够用了的。暂时可以缓解一下迁移到Nginx
的急迫性,并且比较好的减少访问网站时候的延迟比较高的问题。
到目前(2017.2.22)为止在Ubuntu 14.04.5
版本上Apache Event MPM
还不属于正式版本,而是被部署到了backports
(待发布)分支上,处于候选发布状态,因此我们安装的时候,需要执行指定backports
,具体执行命令如下:
模块的配置文件在/etc/apache2/mods-available/mpm_event.conf
,目前我这边用默认配置已经足够了(足见访问量是多么的少,呵呵)。
启用Apache MPM event
模块
查询Apache 2.4
当前正在使用的模块
返回值会是event
, prefork
, worker
中的一个,如果返回了event
,则说明我们已经成功启用了Apache MPM event
模块。
目前实际测试来看,确实能非常明显的加快网站的访问速度,访问延迟明显变短。
最近网站访问异常缓慢,网站响应时间明显延迟很多,观察系统的处理器占用,一点都不高,带宽也在合理范围之内,因此分析Apache-2.4.10
的错误日志
发现大量的出现
如下图:
感觉很奇怪,于是看了一下php
相关的进程,执行命令
执行结果如下图:
发现大量的php5-cgi
进程处于defunct
状态(僵尸状态),导致达到了进程数量的限制上限,无法继续提供服务。
但是上面的日志,是已经出现问题的时候的日志,既然进程不足了,自然无法提供服务了,继续向上追踪,发现大量的进程崩溃日志
感觉很奇怪,最初以为是由于调整Apache-2.4.10
服务器,多次在正常运行中重启服务器,导致正在服务的php5-cgi
进程变成了僵尸进程。但是重启服务器之后,过了几天后,问题依旧发生了。
于是网上搜索了一下,感觉应该更像是PHP-CGI
进程本身存在内存泄漏问题,导致进程长时间执行之后,由于资源开销问题导致进程崩溃。
目前我的服务器上启用的是Apache2
的Event MPM
模块,查看其中的配置文件:
可以看到里面的内容如下:
发现,设置MaxConnectionsPerChild
参数为0,根据 Apache MPM Common Directives 里面的介绍,这个参数的作用就是一个进程处理多少个请求后就退出。而如果设置了 0 则代表,除非出现了异常,否则进程会一直存在。这样的话,一旦资源泄漏,进程就会各种异常了。因此需要设置一下这个参数,一般这个参数设置为1000
-5000
左右,根据实际情况自己调整一下参数。注意:这个参数的设置是会影响到网站的访问速度的,尤其是当服务器的连接次数到达限制的时候,此时大量的服务器进程都在重启,导致此时的访问要么被重置要么耗时变的非常长。因此,如果没有资源泄漏的话,可以不设置这个限制。
注意一下这个介绍的最后一句话,讲的就是这个参数可以修正资源泄漏问题,如下:
修改参数后,需要重启服务生效。
按照上面的方法实现后,过了一个礼拜后,这个现象再次发生了。
观察了一下Apache2
当前已经启用的模块
发现,由于是从Apache2.2
升级到的Apache2.4
,或许是某次的配置,导致fastcgi
与fcgi
两个模块同时被启用了。
是不是两个相同功能的模块同时启用导致功能冲突了呢?
先尝试禁用fastcgi
(这个模块已经被fcgi
替换了).
目前看来,问题依旧发生了!!!
查看Apache2
中的FastCGI
的配置信息
可以看到如下内容
其中的AddHandler
中的.php
引起了注意,因为在日志中出现问题之前一直会出现如下的错误日志:
而这个配置项是从Ubuntu 12.04
中手工引入的,我们尝试去掉这个。另外,可以看到
也就是FastCGI
的最大进程数是被设置成了10
,但是,我这边限制PHP-FPM
的最大进程数为5
,是不是FastCGI
的进程数如果大于PHP-FPM
能够提供服务的数量的时候,会导致FastCGI
进程出现僵尸状态呢? 是不是这个原因导致的呢? 于是修改后的结果如下:
经过这几天的观察,貌似现象不再出现了,这个应该是Apache 2.4
版本引入的BUG
,以前的配置的Apache 2.2
版本上是没有任何问题的,究竟原因是mod_fcgid
无法处理.php
格式的脚本导致,还是由于mod_fcgid
进程数高于php-fpm
的进程数导致mod_fcgid
进程长时间无法获取到可用的php-fpm
连接,导致进程被饿死,这个暂时不详细追究了。
今天在修改配置的时候,由于配置错误,导致PHP-FPM
服务无法正常启动,但是整个服务器竟然一直可以正常访问,那么结论就是Apache 2.4
在当前的配置下,根本就没有使用PHP-FPM
模式进行通信,而是使用标准的FastCGI
的方式调度的。
于是网上搜索半天,结合自己的尝试,找到了根本原因:
上面的配置在Apache 2.2
版本上是不影响后面启用的PHP-FPM
配置的,对于PHP
的请求,最终都是定向到PHP-FPM
的。但是相同的配置在Apache 2.4
上面,则被定向到了FastCGI
上面。因此修改方式如下(至少要高于2.4.10,否则配置无效):
至此,应该才是从根本上解决了服务器上的问题。
开始的时候忽略了一个基础的问题,那就是php5-cgi
跟php5-fpm
进程本身就不应该同时存在,如果服务器使用php5-fpm
,那么php5-cgi
的进程就不应该被调用,这个问题没有重视,导致了整个问题分析时间冗长,反复。
本质上是服务器的配置错误导致问题。