zend studio — Invalid character used in text string
使用zend studio 写php时候,看到项目中有很多类似“Invalid character used in text string”的警告,造成警告的原因是Validation,去掉这个警告的办法为:打开偏好设置,找到Validation项目,在右边选项中把“HTML Syntax Validator(for PHP Files)”对于的勾去掉,即不针对PHP文件做html语法检验。
使用zend studio 写php时候,看到项目中有很多类似“Invalid character used in text string”的警告,造成警告的原因是Validation,去掉这个警告的办法为:打开偏好设置,找到Validation项目,在右边选项中把“HTML Syntax Validator(for PHP Files)”对于的勾去掉,即不针对PHP文件做html语法检验。
当系统变慢时候,我们首先关注的可能是cpu的指标,有时候发现cpu使用率一点都不高,但是系统还是卡,这时可能就需要关心另外一个影响性能的东西–磁盘的IO性能。通过top命令中的%wa可以获取系统当前的io状态,如果该值居高不小,那磁盘的IO可能就有问题了。另外可以通过iotop命令来详细了解什么程序在读写磁盘,速度以及命令行,pid 等信息。如果系统不存在该命令,可以使用如下命令安装:
yum -y install iotop
另外可以通过dd命令来简单测试一下磁盘写操作的性能,例如:
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
命令执行完成后会给出磁盘写操作的平均速度。
在tomcat 6.0版本后,如果没有apr natvie library,启动时候都会出现类似如下的警告信息
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:...
在以前的一篇文章:Tomcat-6.0.33之APR based Apache Tomcat Native library 中介绍了如果在window和linux下解决这个问题。最近使用mac os,也遇到了同样的问题,解决的办法和linux下相似,唯一不同的是在configure时需要指定java home。
自己编译首要条件介绍已经安装了gcc,关于如果安装gcc,可以参考:mac os lion 安装gcc备忘,依赖的库似乎默认系统自带了,如果编译的时候提示缺少库,可以使用 port 方式来安装,顺便提一下 port 是一个和centos下的yum、ubuntu下的apt-get类似的包管理软件。我使用的configure参数设置如下:
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/System/Library/Frameworks/JavaVM.framework/ --with-os-type=Headers/
然后使用make、make install就编译完成。如果成功,在目录/usr/local/apr/lib/下会生成一个名为libtcnative-1.0.dylib的库文件,使用ln命令做一个软链接到上述警告信息中提到的一个目录即可,例如:
ln -s /usr/local/apr/lib/libtcnative-1.dylib /Library/Java/Extensions/
mac os lion 下不必去花心思找破解的屏幕录像软件,其自带的QuickTime Player就有这个功能,同时还带了一些简单的编辑功能,对于普通的引用已经足够了。
使用也很简单,打开QuickTime Player,在菜单栏的“文件”选项中选择“新建屏幕录制”即可,可以选择录制指定区域或全屏,通过设置可以在录像中用圈的形式来表示鼠标的点击,录制好的文件默认存放在存放在“影片”目录中,可以直接使用QuickTime Player打开,另外通过菜单栏中的“共享”选择,将录制视频转换成多种格式。
centos下设置开机自启动某个服务,只需要把启动服务对于的命令添加到/etc/rc.local文件中即可,例如开机自动启动memcached,在文件中加入如下信息即可:
/usr/local/memcached/bin/memcached -d -m 64 -l 127.0.0.1 -p 11211 -u root
mac os lion 中似乎没有这个文件,如果要做到开机自启动,则需要通过plist脚本来完成,关于plist脚本的更多信息可以参考:mac os 定期任务配置。
以自启动memcached为例,首先写一个启动memcached的shell脚本,命名为start-memcached,存放在/usr/bin下,当然文件名、存放路径可以随意按自己喜欢方式来命名,shell脚本的内容为:
#!/bin/bash /usr/bin/memcached -d -m 16 -l 127.0.0.1 -p 11211 -u yangyz
注意该文件要有执行权限,可以使用chmod命令修改,memcached命令根据本机实际路径来书写。
在plist脚本中来执行上述shell脚本,plist脚本命名为:com.yangyz.memcached.plist,存放在/Library/LaunchDaemons下,脚本内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.yangyz.memcached.plist</string> <key>ProgramArguments</key> <array> <string>/usr/bin/start-memcached</string> </array> <key>KeepAlive</key> <false/> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/tmp/memcached.err</string> <key>StandardOutPath</key> <string>/tmp/memcached.out</string> </dict> </plist>
通过上述配置,每次开机后都会自动启动memcached服务了。
在linux下执行定期任务可以使用crontab,目前mac os也可以使用它,不过已不推荐使用。推荐做法是采用plist脚本,plist脚本可以设置执行的动作,时间间隔等其他一些信息。另外crontab的最小时间间隔是一分钟,使用plist脚本原则上时间间隔可以为一秒。
plist脚本存放路径为/Library/LaunchDaemons或/Library/LaunchAgents,其区别是后一个路径的脚本当用户登陆系统后才会被执行,前一个只要系统启动了,哪怕用户不登陆系统也会被执行。
可以通过两种方式来设置脚本的执行时间。一个是使用StartInterval,它指定脚本每间隔多长时间(单位:秒)执行一次;另外一个使用StartCalendarInterval,它可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置。
一个简单例子如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.yangyz.cron.test.plist</string>
<key>ProgramArguments</key>
<array>
<string>/Users/yangyz/plist-test.sh</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
其中key是plist脚本定义的属性,紧跟着的下一行是该属性对应的值。上述脚本是每间隔60秒执行一次/Users/yangyz/plist-test.sh这个shell脚本,也可以使用StartCalendarInterval来替换StartInterval达到同样的效果,例如:
<key>StartCalendarInterval</key> <dict> <key>Minute</key> <integer>0</integer> </dict>
上述设置的意思为每天的每个小时的第0分钟执行,也即使每60秒执行一次。
plist脚本中定义的属性以及具体的含义,可以参看苹果官方网站的说明,地址为:launchd.plist(5) Mac OS X Manual Page
launchctl命令可以控制plist脚本停止或重新加载。例如:
停止脚本com.yangyz.cron.test.plist运行 launchctl unload /Library/LaunchDaemons/com.yangyz.cron.test.plist 启动脚本com.yangyz.cron.test.plist运行 launchctl load /Library/LaunchDaemons/com.yangyz.cron.test.plist
如果执行上面命令看到launchctl: Dubious ownership on file (skipping): /Library/LaunchDaemons/com.yangyz.cron.test.plist这样的错误,其原因是该脚本的owner和当前执行操作用户不一致。使用chown修改一下即可。
参考资料:
http://www.devdaily.com/mac-os-x/launchd-plist-examples-startinterval-startcalendarinterval
http://www.devdaily.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs
文件有一个默认的程序和它关联,当双击文件时就通过默认关联程序打开,打开一个文件可能有多个程序,但默认只有一个,如果默认程序不是自己喜欢的,可以按下面介绍修改的。
在文件上点右键,选择“显示简介”,其中有一项目为“打开方式”,展开它并在程序列表中选择自己喜欢,点击“全部更加”即完成修改默认打开方式。
把一个字符串按照特定的字符分割成多个子字符,一般的编程语言中都提供内置的方法来实现这个功能,在批处理中可以通过命令for来完成。命令格式如下:
for /f "tokens=x,y,m-n delims=chars" %%a in ("str") do cmd
其中tokens获取分割后字符串的列数,列数从1开始技术,可以指定多个,中间用“,”分割。tokens设置具体含义如下:
tokens=x 表示只提取第x列。 tokens=x,y 表示只提取第x列和第y列。 tokens=m-n 表示提取第m列至第n列。 tokens=x* 表示提取第x列和后面所有字符串都作为第x+1列。 tokens=x,* 等同tokens=x* tokens=x,y,m-n 表示提取第x,y列以及第m至第n列。
delims是指定风格字符,可以指定多个,例如:delims=xy,表示以x或者y作为分隔符。注意:tokens和delims必须在同一对引号中。
tokens参数决定了输出变量的个数,%%a表示第一个变量引用,%%b表示第二个变量引用,依次类推。也可以指定第一个变量为%%m、%%n等,总之下一个变量字符是上一个变量的ascii码值加1。
一个简单例子如下:
@echo off
set str=100x200x300y400y500x600y700
for /f "tokens=1,3-5,* delims=x|y" %%a in ("%str%") do (
set c1=%%a
set c3=%%b
set c4=%%c
set c5=%%d
set c6=%%e
)
echo %c1%, %c3%, %c4%, %c5%, %c6%
pause
输出结果为:100, 300, 400, 500, 600y700。其中tokens=1,3-5,*表示提取第1、3至5列,同时把第5列后所有剩余字符串作为第6列,一个输出了5个变量,也可以写作tokens=1,3,4,5,*。
安装xen前需要检查CPU是否支持虚拟化,虚拟化又分全虚拟化和半虚拟化。
半虚拟检查:结果大于0表示支持
cat /proc/cpuinfo | grep flags | grep pae | wc -l
全虚拟化检查:结果大于0表示支持
cat /proc/cpuinfo | egrep '(vmx|svm)' | wc -l
其中vmx是intel cpu 标志,svm是amd cpu 标志
如果CPU支持虚拟化才能使用xen,centos 5.6下安装xen可以直接使用yum来安装。安装命令如下:
yum –y install kernel-xen xen
安装好后在/boot/grub/menu.lst可以看到带有xen内核的启动项,把它设置为默认启动项。重启后就可以安装虚拟机了。
道听途说得到的结论是半虚拟化(PV)的性能原则上比全虚拟化(FV)要好,我的机器支持半虚拟化,所有采用这种方式来创建虚拟机。由于半虚拟化时不能使用 cdrom,iso的方式安装,只能使用网络方式安装,如 http,ftp,nfs,这里采用http的方式。http服务用nginx,源是iso文件,操作步骤为:
使用dd命令创建一个固定大小的空间作为虚拟机的硬盘,这里创建了一个10G的文件
dd if=/dev/zero of=/data/xenimgs/purecentos5_6.img bs=1024K count=10240
安装命令:
virt-install -p -n purecentos5_6 -r 512 --vcpus=2 --file=/data/xenimgs/purecentos5_6.img -l http://192.168.1.68/cs/ --vnc --prompt 说明 -p 使用半虚拟 -n 虚拟机的名称 默认会在/etc/xen中创建一个同名的配置文件 -r 虚拟机的内存 --vcpus 虚拟cpu的个数,不要超过真实cpu的个数 --file 作为磁盘使用的映像文件(可以为多个该选项,该映像文件也可以不事先创建) -l 安装源的路径 --vnc 开启vncserver,可以使用vncviewer连接,如果不指定端口,默认为5900, 如果同时还在创建第二个时候,端口为5901,依次类推,当然可以使用"--vncport=xxx"来为当前虚拟机指定一个端口 有时候由于多次操作,都不知道当前到底是哪个端口,可以使用命令 netstat -nap | grep 590 来查看一下,最后确认具体端口 --prompt 使用交互式的方式,这样会提示你属于一些信息
运行命令后用vncviewer连接上,可以看到跟安装普通的linux一样,按照要求一步一步走下去就ok.
使用已有的系统创建一个新系统,有两种方法
方法一
拷贝老系统的映像文件为新系统的映像文件 cp purecentos5_6.img centos1.img
拷贝配置文件 cp /etc/xen/purecentos5_6 /etc/xen/centos1
修改 /etc/xen/centos1 文件中的name、uuid、disk和mac中对应的信息就大功告成了
方法二
使用virt-clone命令来完成,例如:
virt-clone -o purecentos5_6 -n centos2 -f /data/xenimgs/centos2.img
可以先创建一个干净的系统,再根据上面的方法来创建虚拟机,这样可以快速的创建好一个虚拟机。
在批处理中,如果需要把一个命令的处理结果赋值给一个变量,可以使用如下方法:
for /f "delims=" %%t in ('命令字符串') do set str=%%t
echo %str%
当命令字符串中含有%时,需要转义。使用imagemagick中的identify命令获取图片的宽和高:
identify -format %wx%h demo.jpg
直接在命令行中使用上述命令可以看到输出了图片的高和宽,但是用它放在批处理脚本中来获取命令的输出结果,则失败,原因是命令字符串中含有%符号,它在批处理有特殊含义,所有需要转义,转义的方法是使用两个%%,正确的做法是:
for /f "delims=" %%t in ('identify -format %%wx%%h demo.jpg') set str=%%t