[通讯模型]php-fpm使用unix sock通信和TCP的使用场景及稳定性探讨。
Php/Js/Shell/Go jackxiang 2013-10-28 15:02
背景:线上用unix socket线下测试用tcp 9000,配置一样上线会出问题的。再就是这两种的区别。
两种不同配置会在Nginx上反映出来的:
125 connect() to unix:/usr/local/php/var/run/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.136.1, server: mytv.xiyou.cntv.cn, request:
在你fpm启动脚本php-fpm.conf里配置,在php-fpm.cnf里设置,AF_UNIX稳定性比TCP要高多了,unix socket或者TCP,unix socket的好处是性能更好,一个是AF_UNIX,本地管道,只能本机用一个AF_INET,通过网卡通讯,听说unix不如inet稳定?一个是AF_UNIX,本地管道,只能本机用一个AF_INET,通过网卡通讯。nginx如果打算和fpm在同一台机器,那就用unix sock
如果想分开部署,可以用TCP
基本还是tcp吧
这年头,哪还有一台机器什么都干的事
unix socket是一个环形内存buffer,内核保证顺序
淘宝这里前端接入层是LVS,RS就是nginx + php-fpm,它们之间使用unix sock通信,每台机器都配置一个nginx+php。
回忆未来-向东-Jàck() 下午 03:08:27
不同在:
listen = 127.0.0.1:9000
listen = /usr/local/php/var/run/php-fpm.sock
Nginx在配置上也就不同了:
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
fastcgi_pass unix:/usr/local/php/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
阅读全文
两种不同配置会在Nginx上反映出来的:
125 connect() to unix:/usr/local/php/var/run/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.136.1, server: mytv.xiyou.cntv.cn, request:
在你fpm启动脚本php-fpm.conf里配置,在php-fpm.cnf里设置,AF_UNIX稳定性比TCP要高多了,unix socket或者TCP,unix socket的好处是性能更好,一个是AF_UNIX,本地管道,只能本机用一个AF_INET,通过网卡通讯,听说unix不如inet稳定?一个是AF_UNIX,本地管道,只能本机用一个AF_INET,通过网卡通讯。nginx如果打算和fpm在同一台机器,那就用unix sock
如果想分开部署,可以用TCP
基本还是tcp吧
这年头,哪还有一台机器什么都干的事
unix socket是一个环形内存buffer,内核保证顺序
淘宝这里前端接入层是LVS,RS就是nginx + php-fpm,它们之间使用unix sock通信,每台机器都配置一个nginx+php。
回忆未来-向东-Jàck() 下午 03:08:27
不同在:
listen = 127.0.0.1:9000
listen = /usr/local/php/var/run/php-fpm.sock
Nginx在配置上也就不同了:
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
fastcgi_pass unix:/usr/local/php/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
阅读全文
PHP读取图像文件并在浏览器上显示
Php/Js/Shell/Go jackxiang 2013-10-26 18:31
背景:外包水平太差了,上传图片裁剪,先放服务器,再读取裁剪,我记得可以在用户本地裁剪的,这块都写成那样了,就那样吧,这块设计到图片显示,因支持多个域名和部署问题这块还得直接显示,PHP直接显示图片,用浏览器访问是不可能的,要用SRC:<img src="http://jackxiang.com/logo/getpic?filename=201310262031159804.png&rand=1382790675000">。
PHP读取图像文件并在浏览器上显示
去年做过一个项目,要把用户上传的图像文件用PHP读取图像文件并列出文字清单,当用户点击一个文件名后,就可以显示这个图像.
因为要考虑兼容各种不同的图像格式, 我使用了GD库, 判断出具体是那种图像文件(MINE),再调用相应的image生成函数imagecreatefromXXX(),生成一个img,再将这个img以jpeg格式输出至浏览器,虽然做出来了,但总觉得不满意.
今天有机会重新考虑这个功能,在php手册中发现几行代码,简洁明快,完全能实现我要的功能,还不需要GD库
代码如下:
$size = getimagesize($filename); //获取mime信息
$fp=fopen($filename, "rb"); //二进制方式打开文件
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp); // 输出至浏览器
exit;
} else {
// error
}
?>
代码量是我原来的1/10都不到,速度快了N倍.
外包说三年经验,这个没调出来,我看未必啊,
给他下面的参考代码都给弄错了,我调通了下,他继续:
来处:http://www.shangxueba.com/jingyan/122754.html
PHP读取图像文件并在浏览器上显示
去年做过一个项目,要把用户上传的图像文件用PHP读取图像文件并列出文字清单,当用户点击一个文件名后,就可以显示这个图像.
因为要考虑兼容各种不同的图像格式, 我使用了GD库, 判断出具体是那种图像文件(MINE),再调用相应的image生成函数imagecreatefromXXX(),生成一个img,再将这个img以jpeg格式输出至浏览器,虽然做出来了,但总觉得不满意.
今天有机会重新考虑这个功能,在php手册中发现几行代码,简洁明快,完全能实现我要的功能,还不需要GD库
代码如下:
$size = getimagesize($filename); //获取mime信息
$fp=fopen($filename, "rb"); //二进制方式打开文件
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp); // 输出至浏览器
exit;
} else {
// error
}
?>
代码量是我原来的1/10都不到,速度快了N倍.
外包说三年经验,这个没调出来,我看未必啊,
给他下面的参考代码都给弄错了,我调通了下,他继续:
来处:http://www.shangxueba.com/jingyan/122754.html
我的LINUX服务器centos6.4中没有host dig nslookup strace命令的解决办法
Unix/LinuxC技术 jackxiang 2013-10-26 14:50
Dig 在CentOS6.4/7下面的安装方法及查找某命令在哪个包的方法:http://jackxiang.com/post/7038/
一)rpm -qf /bin/dig
bind-utils-9.11.4-9.P2.el7.x86_64
安装DNS服务器的时候,想测试一下DNS服务器,发现没有host dig nslookup命令,原来是没有安装bind-untils,立即yum install bind-untils搞定如下:
sudo yum install bind-utils -y
它们各自的位置在:
[root@localhost site]# ls /usr/bin/nslookup
/usr/bin/nslookup
You have new mail in /var/spool/mail/root
[root@localhost site]# ls /usr/bin/dig
/usr/bin/dig
[root@localhost site]# ls /usr/bin/host
/usr/bin/host
实践如下:
Total download size: 1.0 M
Installed size: 2.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm | 878 kB 00:00
(2/2): bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm | 182 kB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 9.0 MB/s | 1.0 MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : 32:bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64 1/2
Installing : 32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 2/2
Verifying : 32:bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64 1/2
Verifying : 32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 2/2
Installed:
bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.6
Dependency Installed:
bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.6
Complete!
二)我的LINUX服务器没有strace命令,CENTOS 6.4,怎么安装它呢
打开终端,输入命令:rpm -qa |grep strace,如果显示为空。
3. 如果没有这个显示结果,可以采取如下方式:
3.1 在系统光盘中查找对应的软件包,一般在Server目录下;
3.2 可以去Linux系统对应的官方网站进行下载对应的软件包;
4. 安装方式:
4.1 如果在图形界面,通常双击安装即可;
4.2 如果是在命令行界面,进入对应的路径,输入命令“rpm -ivh strace等文件全称.rpm”安装即可;
4.3 安装完成后使用命令“rpm -qa |grep strace”查询即可知道是否安装正确。
注:如果已经安装了yum源即可直接输入命令:root#yum -install strace-4.5.18-5.el5
使用:
复杂的用法还是直接man strace看说明吧,这里说个最简单的用法就是 strace -p <PID>针对进程跟踪。
Egg:
Total download size: 172 k
Installed size: 533 k
Is this ok [y/N]: y
Downloading Packages:
strace-4.5.19-1.17.el6.x86_64.rpm | 172 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : strace-4.5.19-1.17.el6.x86_64 1/1
Verifying : strace-4.5.19-1.17.el6.x86_64 1/1
Installed:
strace.x86_64 0:4.5.19-1.17.el6
一)rpm -qf /bin/dig
bind-utils-9.11.4-9.P2.el7.x86_64
安装DNS服务器的时候,想测试一下DNS服务器,发现没有host dig nslookup命令,原来是没有安装bind-untils,立即yum install bind-untils搞定如下:
sudo yum install bind-utils -y
它们各自的位置在:
[root@localhost site]# ls /usr/bin/nslookup
/usr/bin/nslookup
You have new mail in /var/spool/mail/root
[root@localhost site]# ls /usr/bin/dig
/usr/bin/dig
[root@localhost site]# ls /usr/bin/host
/usr/bin/host
实践如下:
Total download size: 1.0 M
Installed size: 2.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm | 878 kB 00:00
(2/2): bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm | 182 kB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 9.0 MB/s | 1.0 MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : 32:bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64 1/2
Installing : 32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 2/2
Verifying : 32:bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64 1/2
Verifying : 32:bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64 2/2
Installed:
bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.6
Dependency Installed:
bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.6
Complete!
二)我的LINUX服务器没有strace命令,CENTOS 6.4,怎么安装它呢
打开终端,输入命令:rpm -qa |grep strace,如果显示为空。
3. 如果没有这个显示结果,可以采取如下方式:
3.1 在系统光盘中查找对应的软件包,一般在Server目录下;
3.2 可以去Linux系统对应的官方网站进行下载对应的软件包;
4. 安装方式:
4.1 如果在图形界面,通常双击安装即可;
4.2 如果是在命令行界面,进入对应的路径,输入命令“rpm -ivh strace等文件全称.rpm”安装即可;
4.3 安装完成后使用命令“rpm -qa |grep strace”查询即可知道是否安装正确。
注:如果已经安装了yum源即可直接输入命令:root#yum -install strace-4.5.18-5.el5
使用:
复杂的用法还是直接man strace看说明吧,这里说个最简单的用法就是 strace -p <PID>针对进程跟踪。
Egg:
Total download size: 172 k
Installed size: 533 k
Is this ok [y/N]: y
Downloading Packages:
strace-4.5.19-1.17.el6.x86_64.rpm | 172 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : strace-4.5.19-1.17.el6.x86_64 1/1
Verifying : strace-4.5.19-1.17.el6.x86_64 1/1
Installed:
strace.x86_64 0:4.5.19-1.17.el6
腾讯服务器监控nginx进程,自动拉起
Php/Js/Shell/Go jackxiang 2013-10-21 10:48
其实就是一个ps进程探测,
后面写一个分析
文件先贴出来。
Monitor.sh代码
Init.xml代码:
来自:http://cocos.iteye.com/blog/1063333
后面写一个分析
文件先贴出来。
Monitor.sh代码
Init.xml代码:
来自:http://cocos.iteye.com/blog/1063333
[超短域名]新浪微博客的短域名实现及简单分析
Php/Js/Shell/Go jackxiang 2013-10-21 10:40
背景:近来有一个需求也就是让外包做一个类新浪微博里的短域名功能,而外包给出说是js跳转的,用的是alt里的属性值实现的,让我想起当年我在新浪微博时,正好让一兄弟去做这个短域名的事情,后来就离开了新浪微博,于是有这事儿就了解下呗,其实现方式上有与外包所述有较大出入。
在微博里找个短的Url示例链接如下:http://t.cn/zRM2bLm ,直接贴上google的chrome浏览器里并分析其Http协议头:
请求头和返回如下:
一)Google的Chrome发起请求:
HTTP/1.0 302 Moved Temporarily
Request URL:http://t.cn/zRM2bLm
Request Method:GET
Status Code:302 Moved Temporarily
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Host:t.cn
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1530.2 Safari/537.36
二)服务端返回Location的Url:
Response Headersview source
Age:0
Connection:Keep-Alive
Content-Length:224
Content-Type:text/html;charset=UTF-8
Date:Mon, 21 Oct 2013 02:34:02 GMT
Location:http://www.iheima.com/archives/54668.html
NetAnts:MaxConnection=1
Proxy-Connection:Keep-Alive
Server:weibo
Via:1.1 varnish
X-Varnish:3008712889
三)HTML给用户的展现(一瞬间就过去了,浏览器直接重新定向,几乎看不到的):
这块要快,其实现有可能是通过key=value格式的,如nginx直接代码到某些no-sql存储里实现的才能实现较大并发,
当然对这些url可以实现hash到多台服务器即可实现横向扩展。
这个哥们的redis值得借鉴:http://zjcjack.blog.163.com/blog/static/20283218020130319363715/
在微博里找个短的Url示例链接如下:http://t.cn/zRM2bLm ,直接贴上google的chrome浏览器里并分析其Http协议头:
请求头和返回如下:
一)Google的Chrome发起请求:
HTTP/1.0 302 Moved Temporarily
Request URL:http://t.cn/zRM2bLm
Request Method:GET
Status Code:302 Moved Temporarily
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Host:t.cn
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1530.2 Safari/537.36
二)服务端返回Location的Url:
Response Headersview source
Age:0
Connection:Keep-Alive
Content-Length:224
Content-Type:text/html;charset=UTF-8
Date:Mon, 21 Oct 2013 02:34:02 GMT
Location:http://www.iheima.com/archives/54668.html
NetAnts:MaxConnection=1
Proxy-Connection:Keep-Alive
Server:weibo
Via:1.1 varnish
X-Varnish:3008712889
三)HTML给用户的展现(一瞬间就过去了,浏览器直接重新定向,几乎看不到的):
这块要快,其实现有可能是通过key=value格式的,如nginx直接代码到某些no-sql存储里实现的才能实现较大并发,
当然对这些url可以实现hash到多台服务器即可实现横向扩展。
这个哥们的redis值得借鉴:http://zjcjack.blog.163.com/blog/static/20283218020130319363715/
LoadRunner或jmeter,基本都是这两个工具压一下。
LoadRunner介绍与应用实例:
http://servers.pconline.com.cn/skills/0709/1113200_2.html
破解:
http://hi.baidu.com/chinese_cn/item/37a0cdd9f197c83de2108f1a
阅读全文
LoadRunner介绍与应用实例:
http://servers.pconline.com.cn/skills/0709/1113200_2.html
破解:
http://hi.baidu.com/chinese_cn/item/37a0cdd9f197c83de2108f1a
阅读全文
原理讲解和图示:Nginx基于TCP的四层负载均衡介绍
Nginx Plus的商业授权版开始具有TCP负载均衡的功能。从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请。也就是说,Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。
HTTP负载均衡,也就是我们通常所有“七层负载均衡”,工作在第七层“应用层”。而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”。例如,LVS(Linux Virtual Server,Linux虚拟服务)和F5(一种硬件负载均衡设备),也是属于“四层负载均衡”。
......OSI模型里tcp/ip 是4层,而到应用层则是七层了......相关学习:http://jackxiang.com/post/6280/
阅读全文
Nginx Plus的商业授权版开始具有TCP负载均衡的功能。从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请。也就是说,Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。
HTTP负载均衡,也就是我们通常所有“七层负载均衡”,工作在第七层“应用层”。而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”。例如,LVS(Linux Virtual Server,Linux虚拟服务)和F5(一种硬件负载均衡设备),也是属于“四层负载均衡”。
......OSI模型里tcp/ip 是4层,而到应用层则是七层了......相关学习:http://jackxiang.com/post/6280/
阅读全文
http代理服务器
fiddler启动的时候就会启动代理服务器服务,并监听8888端口:127.0.0.1:8888。这种方法可以捕获以其为代理服务器的请求:如虚拟机里的浏览器、远程主机的请求等等。举个例子:把虚拟机的浏览器添加代理服务器到fiddler,而且多个虚拟机的浏览器都可以共用一个fiddler,在fiddler里面可以实现其常规的功能。
我主要是说下代理下再代理访问外网,有时公司可能不让访问外面的某些网站,你正在用fiddler2调试东东呢,那这个办法就不错了:
配置步骤:
主菜单Tools——Fiddler Options——Gateway选:
Manual Proxy Configuration:
http=192.168.168.251:80
公司出现上不了外网,用上面这个,如果在这里面选了:No Proxy,则上不了网了,实践确实如此 。
但:选Use System Proxy(recommended)后,还是能上,这个奇怪了,系统默认就能上。
选项列表:
......(Client->Fiddler->Gateway->Web)These settings allow you to override that behavior
[X]Use System Proxy(recommended)
[X]Automatically Detect Proxy using WPAD
[X]Manual Proxy Configuration
[X]No Proxy [这个选项目在默认第一项:Use System Proxy(recommended) 时在调试网页时出现有些域名(静态页/js)Url打不开时,勾选上就OK了。因为系统有时会二次proxy导致访问不到]
最后,不用代理,不用Host是最好的设计方式,新加一个hosts是为了进行线上线下调试准备的(估计)。
在win7下的xp虚拟机感觉这块最好是,xp下的host和fiddler2里的host一致为好。(仅管有违初衷设计,但这样能使)
阅读全文
fiddler启动的时候就会启动代理服务器服务,并监听8888端口:127.0.0.1:8888。这种方法可以捕获以其为代理服务器的请求:如虚拟机里的浏览器、远程主机的请求等等。举个例子:把虚拟机的浏览器添加代理服务器到fiddler,而且多个虚拟机的浏览器都可以共用一个fiddler,在fiddler里面可以实现其常规的功能。
我主要是说下代理下再代理访问外网,有时公司可能不让访问外面的某些网站,你正在用fiddler2调试东东呢,那这个办法就不错了:
配置步骤:
主菜单Tools——Fiddler Options——Gateway选:
Manual Proxy Configuration:
http=192.168.168.251:80
公司出现上不了外网,用上面这个,如果在这里面选了:No Proxy,则上不了网了,实践确实如此 。
但:选Use System Proxy(recommended)后,还是能上,这个奇怪了,系统默认就能上。
选项列表:
......(Client->Fiddler->Gateway->Web)These settings allow you to override that behavior
[X]Use System Proxy(recommended)
[X]Automatically Detect Proxy using WPAD
[X]Manual Proxy Configuration
[X]No Proxy [这个选项目在默认第一项:Use System Proxy(recommended) 时在调试网页时出现有些域名(静态页/js)Url打不开时,勾选上就OK了。因为系统有时会二次proxy导致访问不到]
最后,不用代理,不用Host是最好的设计方式,新加一个hosts是为了进行线上线下调试准备的(估计)。
在win7下的xp虚拟机感觉这块最好是,xp下的host和fiddler2里的host一致为好。(仅管有违初衷设计,但这样能使)
阅读全文
背景:其实ttserver一直没有实践过,昨天有同事问怎么样清空,我查了下好像和memcache一样的协议,用telnet上其端口用:flush_all 就能清空。
通过memcache协议使用ttserver
通过telnet 127.0.0.1 1978 telnet连接到到我们第一节的启动实例。
以下我们通过add增加key为key1和value为value1的数据。
通过get key1获取数据,如果你看不明白,可以搜索下memcache协议的东西看下。
add key1 1 0 6
value1
STORED
get key1
VALUE key1 0 6
value1
END
通过php使用
运行后输出:
value2 a:1:{s:6:"value3";s:14:"this is value3";}
来自:http://www.cnblogs.com/sunli/archive/2009/03/18/1415168.html
用Nginx作反向代理 :http://blog.csdn.net/starxu85/article/details/5247491
摘录:
2.利用nginx实现http协议的高可用性
2.1为什么要把nginx扯进来?
ttserver提供了http接口
ttserver没有提供安全 保证
nginx在处理http请求和反向代理的性能 非常好
nginx的反向代理具有负载均衡和健康检查功能
当然,也可参考:http://www.s135.com/post/384/
启动ttserver的示例:
ttserve安装及测试:
概述
编辑
Tokyo Cabinet 是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。
Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。
2ttserve安装
编辑
下载zlib和bzip并进行安装,因为我使用的是ubuntu系统,所以直接apt-get install libbz2-dev就 ok了。
安装tokyo cabinet
下载 tokyocabinet-1.4.41.tar.gz
tar zxvf tokyocabinet-1.4.41.tar.gz
cd tokyocabinet-1.4.41/
64位系统安装方法
./configure
make
make install
32位系统安装方法
./configure --enable-off64 #启动64位偏移,因为本机是32位,如果不加此参数,数据库文件超过2G就会崩溃
make
make install
因为我的机器是32位,所以选择第二种方法
安装tokyo tyrant
tar zxvf tokyotyrant-1.1.40.tar.gz
cd tokyotyrant-1.1.40
./configure
make
make install
创建tokyo tyrant数据文件存放的目录
mkdir -p /ser/ttserver
ttserver相关参数
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-ext path] [-mask expr] [-unmask expr] [dbname]
-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
-port num : 指定需要绑定的端口号。默认端口号为1978
-thnum num : 指定线程数。默认为8个线程。
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件(这里指定文件名)。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld : 在日志文件中还记录DEBUG调试信息。
-le : 在日志文件中仅记录错误信息。
-ulog path : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)
-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。
-ext path : 扩展的脚本文件
-mask expr : 需要禁止的命令,多个命名用","隔开
-unmaks expr : 允许的命令
单机模式启动
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ser/ttserver/ttserver.pid -log /ser/ttserver/ttserver.log -le -ulog /ser/ttserver/ -ulim 128m -sid 1 -rts /ser/ttserver.rts /ser/ttserver/database.tch
启动的时候,根据参数database名来确定使用的TC数据库类型。如果为"*",则使用内存hash表,如果为"+",则使用内存B+库,如果后缀为".tch",则使用hash表,如果后缀为".tcb",则使用B+树数据库,如果后缀为".tcf",则使用定长数组。如果dbname参数被省略,则采用内存hash数据库。
如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中。
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ser/ttserver/ttserver.pid -log /ser/ttserver/ttserver.log -le -ulog /ser/ttserver/ -ulim 128m -sid 1 -rts /ser/ttserver.rts /ser/ttserver/database.tch#bnum=1000000
如果大量的客户端访问ttserver,请确保文件描述符够用。许多服务器的默认文件描述符为1024,可以在启动ttserver前使用ulimit命令提高这项值。例如:ulimit -SHn 51200
关闭服务
cat /ser/ttserver/ttserver.pid或者ps -ef|grep ttserver
kill -TERM 10095
调用
写入
curl -X PUT http://127.0.0.1:11211/key -d "ttserver"
读取
curl http://127.0.0.1:11211/key
删除
curl -X DELETE http://127.0.0.1:11211/key
测试写入和读取1000条数据
starttime=`date "+%s"`;for((i=1;i<1001;i++)); do curl http://127.0.0.1:11211/key_$i; done;endtime=`date "+%s"`;echo $(($endtime-$starttime));
摘自:http://baike.baidu.com/view/3551871.htm?fr=aladdin
附录:CURL -X参数说明
-X/--request <command> Specify request command to use
写入
curl -X PUT http://127.0.0.1:11211/key -d "ttserver"
读取
curl http://127.0.0.1:11211/key
删除
curl -X DELETE http://127.0.0.1:11211/key
测试写入和读取1000条数据
starttime=`date "+%s"`;for((i=1;i<1001;i++)); do curl http://127.0.0.1:11211/key_$i; done;endtime=`date "+%s"`;echo $(($endtime-$starttime));
可以用fiddler2加上curl的代理了解这个-X:
curl -x 10.0.0.172:80 www.wo.com.cn 此命令使用10.0.0.172:80这个代理服务器IP和端口访问站点www.wo.com.cn
fiddler2 提供的 8888 端口(ttserver:21211,21213):
curl -x 127.0.0.1:8888 -X PUT http://192.168.109.7:21211/key -d "ttserver"
读取:
curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
删除
curl -x 127.0.0.1:8888 -X DELETE http://192.168.109.7:21211/key
上面的写入读取及删除,实践如下:
单独对写入作fiddler2下的http请求头分析:
一)C:\Users\admin>curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
ttserver
POST参数,fiddler2的右侧webform:
http请求返回:
HTTP/1.1 201 Created
Content-Type: text/plain
Content-Length: 8
Created
[/codes]
二)C:\Users\admin>curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
ttserver
返回:
三)C:\Users\admin>curl -x 127.0.0.1:8888 -X DELETE http://192.168.109.7:21211/key
OK
请求头:
返回:
最后,
发现这个curl的 -X参数有点意思,也就是在http的头里加上PUT,GET,DELETE:
PUT http://192.168.109.7:21211/key
GET http://192.168.109.7:21211/key
DELETE http://192.168.109.7:21211/key
key就是键值,而这个传入PUT时的form有键无值,这个键就是存入ttserver的值,通过GET及DELETE能够对这个存入的ttserver值进行各种操作。
通过memcache协议使用ttserver
通过telnet 127.0.0.1 1978 telnet连接到到我们第一节的启动实例。
以下我们通过add增加key为key1和value为value1的数据。
通过get key1获取数据,如果你看不明白,可以搜索下memcache协议的东西看下。
add key1 1 0 6
value1
STORED
get key1
VALUE key1 0 6
value1
END
通过php使用
运行后输出:
value2 a:1:{s:6:"value3";s:14:"this is value3";}
来自:http://www.cnblogs.com/sunli/archive/2009/03/18/1415168.html
用Nginx作反向代理 :http://blog.csdn.net/starxu85/article/details/5247491
摘录:
2.利用nginx实现http协议的高可用性
2.1为什么要把nginx扯进来?
ttserver提供了http接口
ttserver没有提供安全 保证
nginx在处理http请求和反向代理的性能 非常好
nginx的反向代理具有负载均衡和健康检查功能
当然,也可参考:http://www.s135.com/post/384/
启动ttserver的示例:
ttserve安装及测试:
概述
编辑
Tokyo Cabinet 是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。
Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。
2ttserve安装
编辑
下载zlib和bzip并进行安装,因为我使用的是ubuntu系统,所以直接apt-get install libbz2-dev就 ok了。
安装tokyo cabinet
下载 tokyocabinet-1.4.41.tar.gz
tar zxvf tokyocabinet-1.4.41.tar.gz
cd tokyocabinet-1.4.41/
64位系统安装方法
./configure
make
make install
32位系统安装方法
./configure --enable-off64 #启动64位偏移,因为本机是32位,如果不加此参数,数据库文件超过2G就会崩溃
make
make install
因为我的机器是32位,所以选择第二种方法
安装tokyo tyrant
tar zxvf tokyotyrant-1.1.40.tar.gz
cd tokyotyrant-1.1.40
./configure
make
make install
创建tokyo tyrant数据文件存放的目录
mkdir -p /ser/ttserver
ttserver相关参数
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-ext path] [-mask expr] [-unmask expr] [dbname]
-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
-port num : 指定需要绑定的端口号。默认端口号为1978
-thnum num : 指定线程数。默认为8个线程。
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件(这里指定文件名)。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld : 在日志文件中还记录DEBUG调试信息。
-le : 在日志文件中仅记录错误信息。
-ulog path : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)
-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。
-ext path : 扩展的脚本文件
-mask expr : 需要禁止的命令,多个命名用","隔开
-unmaks expr : 允许的命令
单机模式启动
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ser/ttserver/ttserver.pid -log /ser/ttserver/ttserver.log -le -ulog /ser/ttserver/ -ulim 128m -sid 1 -rts /ser/ttserver.rts /ser/ttserver/database.tch
启动的时候,根据参数database名来确定使用的TC数据库类型。如果为"*",则使用内存hash表,如果为"+",则使用内存B+库,如果后缀为".tch",则使用hash表,如果后缀为".tcb",则使用B+树数据库,如果后缀为".tcf",则使用定长数组。如果dbname参数被省略,则采用内存hash数据库。
如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中。
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ser/ttserver/ttserver.pid -log /ser/ttserver/ttserver.log -le -ulog /ser/ttserver/ -ulim 128m -sid 1 -rts /ser/ttserver.rts /ser/ttserver/database.tch#bnum=1000000
如果大量的客户端访问ttserver,请确保文件描述符够用。许多服务器的默认文件描述符为1024,可以在启动ttserver前使用ulimit命令提高这项值。例如:ulimit -SHn 51200
关闭服务
cat /ser/ttserver/ttserver.pid或者ps -ef|grep ttserver
kill -TERM 10095
调用
写入
curl -X PUT http://127.0.0.1:11211/key -d "ttserver"
读取
curl http://127.0.0.1:11211/key
删除
curl -X DELETE http://127.0.0.1:11211/key
测试写入和读取1000条数据
starttime=`date "+%s"`;for((i=1;i<1001;i++)); do curl http://127.0.0.1:11211/key_$i; done;endtime=`date "+%s"`;echo $(($endtime-$starttime));
摘自:http://baike.baidu.com/view/3551871.htm?fr=aladdin
附录:CURL -X参数说明
-X/--request <command> Specify request command to use
写入
curl -X PUT http://127.0.0.1:11211/key -d "ttserver"
读取
curl http://127.0.0.1:11211/key
删除
curl -X DELETE http://127.0.0.1:11211/key
测试写入和读取1000条数据
starttime=`date "+%s"`;for((i=1;i<1001;i++)); do curl http://127.0.0.1:11211/key_$i; done;endtime=`date "+%s"`;echo $(($endtime-$starttime));
可以用fiddler2加上curl的代理了解这个-X:
curl -x 10.0.0.172:80 www.wo.com.cn 此命令使用10.0.0.172:80这个代理服务器IP和端口访问站点www.wo.com.cn
fiddler2 提供的 8888 端口(ttserver:21211,21213):
curl -x 127.0.0.1:8888 -X PUT http://192.168.109.7:21211/key -d "ttserver"
读取:
curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
删除
curl -x 127.0.0.1:8888 -X DELETE http://192.168.109.7:21211/key
上面的写入读取及删除,实践如下:
单独对写入作fiddler2下的http请求头分析:
一)C:\Users\admin>curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
ttserver
POST参数,fiddler2的右侧webform:
http请求返回:
HTTP/1.1 201 Created
Content-Type: text/plain
Content-Length: 8
Created
[/codes]
二)C:\Users\admin>curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
ttserver
返回:
三)C:\Users\admin>curl -x 127.0.0.1:8888 -X DELETE http://192.168.109.7:21211/key
OK
请求头:
返回:
最后,
发现这个curl的 -X参数有点意思,也就是在http的头里加上PUT,GET,DELETE:
PUT http://192.168.109.7:21211/key
GET http://192.168.109.7:21211/key
DELETE http://192.168.109.7:21211/key
key就是键值,而这个传入PUT时的form有键无值,这个键就是存入ttserver的值,通过GET及DELETE能够对这个存入的ttserver值进行各种操作。
背景:PHP出现,array (
':error' => 'Lock wait timeout exceeded; try restarting transaction',
mysql提示 Lock wait timeout exceeded解决办法:
利用 SHOW PROCESSLIST来查看问题
原因:原因是你使用的InnoDB 表类型的时候,
默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,
因为有的锁等待超过了这个时间,所以抱错.
你可以把这个时间加长,或者优化存储过程,事务避免过长时间的等待.
解决的办法有两个:
第一:innodb_lock_wait_timeout 锁定等待时间改大
my.ini文件:
代码如下:
来自:http://www.111cn.net/database/mysql/45809.htm
':error' => 'Lock wait timeout exceeded; try restarting transaction',
mysql提示 Lock wait timeout exceeded解决办法:
利用 SHOW PROCESSLIST来查看问题
原因:原因是你使用的InnoDB 表类型的时候,
默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,
因为有的锁等待超过了这个时间,所以抱错.
你可以把这个时间加长,或者优化存储过程,事务避免过长时间的等待.
解决的办法有两个:
第一:innodb_lock_wait_timeout 锁定等待时间改大
my.ini文件:
代码如下:
来自:http://www.111cn.net/database/mysql/45809.htm
[实践OK]svn打版本号:Subversion 的 svn:keywords,SVN使用详解之如何设置svn:keywords。
Php/Js/Shell/Go jackxiang 2013-10-9 11:18
背景:在线上代码和线下代码不一致时,用这个时间先比对是很重要的,首先看时间确定是不是最新的代码,再进行问题排查是很有必要的。再就是线上代码的调试,要注意其函数和调用层次位置,一定要区分开线下最新代码区分看(线下有zend 等跳转有可能心里觉得线下是最好的样板,而给调试带来不便。),主要是通过版本号来判定线上是否已经更新上去了。
实践OK如下:
只需要对svnClient安装后,选中目录或文件点右键,TortoiseSVN-> properties->New...->Keywords,选中:ID即可:
* @version $Id: imageinfo.php 230 2014-10-10 07:33:10Z xiangdong $
提交后自己就给变成自己的当前文件,日期及版本号。
—————————————更多参数———————————————————————————————————————————
Subversion 的 svn:keywords 是一个非常有用的功能,可以让你将发生在源代码中的一些属性的变化自动地更新到源代码中。
所有php的开头都要加上
/**
* @version $Id: activitymodule.php 1571 2013-10-08 07:02:15Z yu****chun $
*/
选中目录或文件点右键,TortoiseSVN-> properties->New...->Keywords,先中:Author,Date,ID,Revision,URL.选后就算是打上标就可以了。每次递交就会自动更新,TortoiseSVN-> properties->New...->Advanced里可自己写。
常用.h .cpp文件头
/**
@(#)$Id$
@brief Multi-threaded programming critical section (lock)
@Author $Author$
@Date $Date$
@Revision $Revision$
@URL $URL$
@Header $Header$
*/
附加:
$Id$
$Author$
$lastChangedBy$
$lastChangedDate$
$Date$$Revision$
$URL$
$Header$
一般搞这种的都是从cvs时代过来时就搞这个keyword,现转向svn了svn也和cvs一样支持keyword,而且用法也一样。
SVN使用详解之如何设置svn:keywords :
Subversion 中可以使用的 Keyword 包括下面这些。
Id
这是一种综合的格式,例如“$Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $”。
LastChangedDate
最后被修改的时间,这个属性也可以缩写为 Date。
LastChangedBy
最后修改该源代码文件的用户名,这个属性也可以被缩写为 Author。
LastChangedRevision
最后修订的版本号,这个属性也可以被缩写为 Revision 或者 Rev。
HeadURL
该源代码文件所位于的 Repository 上的绝对 URL 地址,这个属性也可以被缩写为 URL。
使用命令行设置:
先CD到你的工作目录(对于工作目录在二楼有解释,简而言之就是你用于暂时存放Subversion中为本库的一个Copy的目录,
如果你安装了TortoiseSVN工作目录上是带个小图标的,更新了文件没有更新是一个叹号,更新后有一个绿色的勾)
E:\MakeWeb\www.zxlm.cn\blogdevelopment\admin>svn propset svn:keywords "LastChangedDate Author" *.php
属性“svn:keywords”设定于“admincp.php”
属性“svn:keywords”设定于“adminfunctions.php”
属性“svn:keywords”设定于“article.php”
属性“svn:keywords”设定于“attachment.php”
属性“svn:keywords”设定于“cache.php”
属性“svn:keywords”设定于“category.php”
如果提示 svn: “.”不是工作拷贝
说明你不在工作目录下执行些命令.
CD到工作目录即可.
对于每个项目的工作目录都需要单独设置.
如果提示 svn: 本客户端已过时,无法存取工作拷贝
那么你就得检查一下你的SVN的客户端和SVN服务器的版本是不是一致了,看这里了解详细.
最好两者都使用最新的版本.
使用TortoiseSVN设置svn:keywords
在你的工作目录中需要设置的文件上右键:选择属性.
然后出来一个这样的对应框:
在属性中选中 svn:keywords.
在取值中键入需要设置的关键字,所有关键字只能一次全部输入.
再确定.
这样你就设置好了 svn:keywords 了.
引用:
Subversion 的 svn:keywords 是一个非常有用的功能,可以让你将发生在源代码中的一些属性的变化自动地更新到源代码中。
比如你可以在客齐集社区的每一个页面的底部都看到的这样的一行字。
$Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $这行字的意思是表示,V2EXCore.php 这个源代码文件最后被用户 livid 更新于 2005-10-29 23:08:09Z,修订版本号为 4。要实现这样的自动更新,你只要对需要这样的属性的文件上使用下面这行指令。
svn propset svn:keywords "Id" V2EXCore.php然后在源代码文件中需要 Subversion 进行自动更新的地方插入 $Id$ 这样的 Keyword,那么在你下次进行 svn commit 之后,该 $Id$ 就会被 Subversion 自动替换为 $Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $ 这样的格式。
Subversion 只会对你明确设置了 Keyword 进行更新,比如如果你对某个源代码文件执行了下面这条指令。
svn propset svn:keywords "Id Date" V2EXCore.php则在 V2EXCore.php 中所有的 $Id$ 和 $Date$ 都会被替换,而 $Author$ 之类的没有被设置的属性则不会发生替换。
来自:http://blog.cntv.cn/11430895-3106020.html
更多参考:
http://blog.ihipop.info/2011/08/2698.html
http://jdkcn.com/entry/how-to-add-auto-props-in-subversion.html
http://blog.ihipop.info/2011/08/2698.html
http://ad-hoc.blog.sohu.com/107465483.html
直接修改配置文件的方法,时间相差8小时:
http://hi.baidu.com/cyrist/item/97a5e6f12b44b3c4a835a2dc
SVN嵌入属性(获得最后一次提交的人,时间...):
http://blog.csdn.net/lsd123/article/details/3345388
实践OK如下:
只需要对svnClient安装后,选中目录或文件点右键,TortoiseSVN-> properties->New...->Keywords,选中:ID即可:
* @version $Id: imageinfo.php 230 2014-10-10 07:33:10Z xiangdong $
提交后自己就给变成自己的当前文件,日期及版本号。
—————————————更多参数———————————————————————————————————————————
Subversion 的 svn:keywords 是一个非常有用的功能,可以让你将发生在源代码中的一些属性的变化自动地更新到源代码中。
所有php的开头都要加上
/**
* @version $Id: activitymodule.php 1571 2013-10-08 07:02:15Z yu****chun $
*/
选中目录或文件点右键,TortoiseSVN-> properties->New...->Keywords,先中:Author,Date,ID,Revision,URL.选后就算是打上标就可以了。每次递交就会自动更新,TortoiseSVN-> properties->New...->Advanced里可自己写。
常用.h .cpp文件头
/**
@(#)$Id$
@brief Multi-threaded programming critical section (lock)
@Author $Author$
@Date $Date$
@Revision $Revision$
@URL $URL$
@Header $Header$
*/
附加:
$Id$
$Author$
$lastChangedBy$
$lastChangedDate$
$Date$$Revision$
$URL$
$Header$
一般搞这种的都是从cvs时代过来时就搞这个keyword,现转向svn了svn也和cvs一样支持keyword,而且用法也一样。
SVN使用详解之如何设置svn:keywords :
Subversion 中可以使用的 Keyword 包括下面这些。
Id
这是一种综合的格式,例如“$Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $”。
LastChangedDate
最后被修改的时间,这个属性也可以缩写为 Date。
LastChangedBy
最后修改该源代码文件的用户名,这个属性也可以被缩写为 Author。
LastChangedRevision
最后修订的版本号,这个属性也可以被缩写为 Revision 或者 Rev。
HeadURL
该源代码文件所位于的 Repository 上的绝对 URL 地址,这个属性也可以被缩写为 URL。
使用命令行设置:
先CD到你的工作目录(对于工作目录在二楼有解释,简而言之就是你用于暂时存放Subversion中为本库的一个Copy的目录,
如果你安装了TortoiseSVN工作目录上是带个小图标的,更新了文件没有更新是一个叹号,更新后有一个绿色的勾)
E:\MakeWeb\www.zxlm.cn\blogdevelopment\admin>svn propset svn:keywords "LastChangedDate Author" *.php
属性“svn:keywords”设定于“admincp.php”
属性“svn:keywords”设定于“adminfunctions.php”
属性“svn:keywords”设定于“article.php”
属性“svn:keywords”设定于“attachment.php”
属性“svn:keywords”设定于“cache.php”
属性“svn:keywords”设定于“category.php”
如果提示 svn: “.”不是工作拷贝
说明你不在工作目录下执行些命令.
CD到工作目录即可.
对于每个项目的工作目录都需要单独设置.
如果提示 svn: 本客户端已过时,无法存取工作拷贝
那么你就得检查一下你的SVN的客户端和SVN服务器的版本是不是一致了,看这里了解详细.
最好两者都使用最新的版本.
使用TortoiseSVN设置svn:keywords
在你的工作目录中需要设置的文件上右键:选择属性.
然后出来一个这样的对应框:
在属性中选中 svn:keywords.
在取值中键入需要设置的关键字,所有关键字只能一次全部输入.
再确定.
这样你就设置好了 svn:keywords 了.
引用:
Subversion 的 svn:keywords 是一个非常有用的功能,可以让你将发生在源代码中的一些属性的变化自动地更新到源代码中。
比如你可以在客齐集社区的每一个页面的底部都看到的这样的一行字。
$Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $这行字的意思是表示,V2EXCore.php 这个源代码文件最后被用户 livid 更新于 2005-10-29 23:08:09Z,修订版本号为 4。要实现这样的自动更新,你只要对需要这样的属性的文件上使用下面这行指令。
svn propset svn:keywords "Id" V2EXCore.php然后在源代码文件中需要 Subversion 进行自动更新的地方插入 $Id$ 这样的 Keyword,那么在你下次进行 svn commit 之后,该 $Id$ 就会被 Subversion 自动替换为 $Id: V2EXCore.php 4 2005-10-29 23:08:09Z livid $ 这样的格式。
Subversion 只会对你明确设置了 Keyword 进行更新,比如如果你对某个源代码文件执行了下面这条指令。
svn propset svn:keywords "Id Date" V2EXCore.php则在 V2EXCore.php 中所有的 $Id$ 和 $Date$ 都会被替换,而 $Author$ 之类的没有被设置的属性则不会发生替换。
来自:http://blog.cntv.cn/11430895-3106020.html
更多参考:
http://blog.ihipop.info/2011/08/2698.html
http://jdkcn.com/entry/how-to-add-auto-props-in-subversion.html
http://blog.ihipop.info/2011/08/2698.html
http://ad-hoc.blog.sohu.com/107465483.html
直接修改配置文件的方法,时间相差8小时:
http://hi.baidu.com/cyrist/item/97a5e6f12b44b3c4a835a2dc
SVN嵌入属性(获得最后一次提交的人,时间...):
http://blog.csdn.net/lsd123/article/details/3345388
Nginx 报错“configure: error: the HTTP rewrite module requires the PCRE library”解决办法
Unix/LinuxC技术 jackxiang 2013-10-6 13:12
背景: 在树莓派上编译安装Nginx出现下面错误,因为是相当于debian上安装,所以得atp-get。
阅读全文
阅读全文
复盘:就是DHCP的网关IP和DNS要找对,且DHCP服务是启动且是好的,防火墙不拦截也就能上网了。
I:IP配置网
1 编辑 > 虚拟网络编辑器
2 选中NAT模式的网卡(我的是VMnet8),点击 “NAT设置” 按钮
3 查出 子网IP,子网掩码和 网关IP
查出 子网IP,子网掩码和 网关IP 后接下来就好办了。
二、配置虚拟机 网络配置文件,重启网卡
1 进入 /etc/sysconfig/network-scripts
2 vim ifcfg-ens32,修改配置如下:
BOOTPROTO="none" #DHCP去掉
ONBOOT="yes"
IPADDR="192.168.153.22"
PREFIX="24"
GATEWAY="192.168.153.2"
DNS1="192.168.153.2"
3. 退出 vim 编辑,重启网卡:
service network restart
或
systemctl restart network
DNS1设置后会启动网络后会自动配置DNS解析文件:
cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.153.2
II:DHCP服务网:
开始---设置--控制面板---管理工具---服务(运行:services.msc)
确保 VMware DHCPService 和VMware NAT Service 服务已经启动
启动之后重新在虚拟机中连接网络(一般是eth0)
DHCP service for virtual networks.
C:\WINDOWS\SysWOW64\vmnetdhcp.exe
Network address translation for virtual networks.
C:\WINDOWS\SysWOW64\vmnat.exe
启动类型:自动。
上网dig和ifconfig这个命令分别在:
yum install bind-utils net-tools -y
dig jackxiang.com @192.168.153.2 #成功解析。
预告:最后我安装了盗版的VMware8,升级了一下(会提示你卸载旧版本),也就没有下面一堆的乱七八糟的问题了,但那个192.168.137.1还是由那个注册表修改下,NAT方式Linux也就能上网了。
背景:重装系统后,配置Vmware后有可能里面的Linux无法上网。尽管IP一样的,但是就他妈的上不了外网,给升级Rpm包带来困难,路由如下:
root@192.168.137.128:~# traceroute baidu.com
traceroute to baidu.com (220.181.111.86), 30 hops max, 60 byte packets
1 192.168.137.2 (192.168.137.2) 0.348 ms 0.307 ms 0.295 ms
2 * * *
3 * * *
4 * * *
修改后是这样的:
root@192.168.137.128:~# traceroute baidu.com
traceroute to baidu.com (220.181.111.86), 30 hops max, 60 byte packets
1 192.168.137.1 (192.168.137.1) 0.188 ms * *
2 * * *
3 * * *
。。。。。。
29 * * *
30 * * *
也就是说还是没明确的路由,但Ping是通的,Curl是通的,能获取到数据就是Ok。
......
Is this ok [y/N]: y
Downloading Packages:
traceroute-2.0.14-2.el6.x86_64.rpm
......
Running Transaction
Installing : 3:traceroute-2.0.14-2.el6.x86_64
Verifying : 3:traceroute-2.0.14-2.el6.x86_64
Installed:
traceroute.x86_64 3:2.0.14-2.el6
Complete!
________________________________________________________________________________________________________
防火墙是要开启的,否则在共享时会返回null的问题:
1.services.msc
2.找到:Windows Firewall,启动类型:自动,启动:让服务状态为已启动。
——网上其实很多方法,都不行,我想可能是Vmware6.0和其下面的虚拟机的一个重装后的小Bug—————
解决办法:【第8条才是关键,特别注意。】
0)删除:修改 /etc/udev/rules.d/70-persistent-net.rules 文件
删除掉 关于 eth0 的信息。修改 第二条 eth1 的网卡的名字为 eth0. 重启服务器。
http://jackxiang.com/post/5651/
1)移动:下ifcfg-eth0到ifcfg-eth0.bak
2)关闭:ifconfig eth0 down
3)启动:ifconfig eth0 up
4) 重置:/etc/init.d/network reload
5)还原:ifcfg-eth0.bak -》ifcfg-eth0
6)重启:service network restart
7)把services.msc里的Vmware服务都全开了。
8)一系列都做了通过service network restart还是不能获取到新的DHC ip段:
VMware下->Edit->Virtue Network Settings...->DHCP->选 Vmware8(properties)->Start IP address(这块由:192.168.137.128修改最后一位:129),也就再service network restart 获取到129了,再修改回去就成(我估计这里之所以修改128成129是因为DHCP有缓存:192.168.157.128终于变为:192.168.137.128),呵呵,不容易,不知vmware的高版本有没有这个问题。
9)有时间win7要修改成:192.168.137.128 才能上网,而前面默认就是128,你得修改下vmware下的linux才能变IP第三位(由129变到128),而你修改的是最后一位128到129,于是你想还回去,可就又不行了,这也是vmware6.0的问题,这样就Ok了:
你再修改为更低:如:192.168.137.120 (128),再修改下注册表到另外的IP(192.168.138.0),再启动Vmware进行修改到:192.168.138.128。为此,你再关闭后修改注册表改回:192.168.137.0,启动vmware还回去(192.168.137.128)就可以了。
其实以上所有操作都是为了能让vmware下的linux能够获取到正确且能上网的ip:192.168.137.128。这个128是由dhcp确定的,必须修改,但修改后又有可能上不了外网。(这点也是奇怪的),也就只能这样折腾了,vmware6.0害人呐,呵呵。
最后,这个Vmware6.0下的虚拟Linux也就可以上网更新rpm了,NAT的Vmware6.0生成的Vmware8的访问类型:无法连接到Internet(其实也能访问),再就是防火墙要打开,否则共享会出现null的提示。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
阅读全文
I:IP配置网
1 编辑 > 虚拟网络编辑器
2 选中NAT模式的网卡(我的是VMnet8),点击 “NAT设置” 按钮
3 查出 子网IP,子网掩码和 网关IP
查出 子网IP,子网掩码和 网关IP 后接下来就好办了。
二、配置虚拟机 网络配置文件,重启网卡
1 进入 /etc/sysconfig/network-scripts
2 vim ifcfg-ens32,修改配置如下:
BOOTPROTO="none" #DHCP去掉
ONBOOT="yes"
IPADDR="192.168.153.22"
PREFIX="24"
GATEWAY="192.168.153.2"
DNS1="192.168.153.2"
3. 退出 vim 编辑,重启网卡:
service network restart
或
systemctl restart network
DNS1设置后会启动网络后会自动配置DNS解析文件:
cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.153.2
II:DHCP服务网:
开始---设置--控制面板---管理工具---服务(运行:services.msc)
确保 VMware DHCPService 和VMware NAT Service 服务已经启动
启动之后重新在虚拟机中连接网络(一般是eth0)
DHCP service for virtual networks.
C:\WINDOWS\SysWOW64\vmnetdhcp.exe
Network address translation for virtual networks.
C:\WINDOWS\SysWOW64\vmnat.exe
启动类型:自动。
上网dig和ifconfig这个命令分别在:
yum install bind-utils net-tools -y
dig jackxiang.com @192.168.153.2 #成功解析。
预告:最后我安装了盗版的VMware8,升级了一下(会提示你卸载旧版本),也就没有下面一堆的乱七八糟的问题了,但那个192.168.137.1还是由那个注册表修改下,NAT方式Linux也就能上网了。
背景:重装系统后,配置Vmware后有可能里面的Linux无法上网。尽管IP一样的,但是就他妈的上不了外网,给升级Rpm包带来困难,路由如下:
root@192.168.137.128:~# traceroute baidu.com
traceroute to baidu.com (220.181.111.86), 30 hops max, 60 byte packets
1 192.168.137.2 (192.168.137.2) 0.348 ms 0.307 ms 0.295 ms
2 * * *
3 * * *
4 * * *
修改后是这样的:
root@192.168.137.128:~# traceroute baidu.com
traceroute to baidu.com (220.181.111.86), 30 hops max, 60 byte packets
1 192.168.137.1 (192.168.137.1) 0.188 ms * *
2 * * *
3 * * *
。。。。。。
29 * * *
30 * * *
也就是说还是没明确的路由,但Ping是通的,Curl是通的,能获取到数据就是Ok。
......
Is this ok [y/N]: y
Downloading Packages:
traceroute-2.0.14-2.el6.x86_64.rpm
......
Running Transaction
Installing : 3:traceroute-2.0.14-2.el6.x86_64
Verifying : 3:traceroute-2.0.14-2.el6.x86_64
Installed:
traceroute.x86_64 3:2.0.14-2.el6
Complete!
________________________________________________________________________________________________________
防火墙是要开启的,否则在共享时会返回null的问题:
1.services.msc
2.找到:Windows Firewall,启动类型:自动,启动:让服务状态为已启动。
——网上其实很多方法,都不行,我想可能是Vmware6.0和其下面的虚拟机的一个重装后的小Bug—————
解决办法:【第8条才是关键,特别注意。】
0)删除:修改 /etc/udev/rules.d/70-persistent-net.rules 文件
删除掉 关于 eth0 的信息。修改 第二条 eth1 的网卡的名字为 eth0. 重启服务器。
http://jackxiang.com/post/5651/
1)移动:下ifcfg-eth0到ifcfg-eth0.bak
2)关闭:ifconfig eth0 down
3)启动:ifconfig eth0 up
4) 重置:/etc/init.d/network reload
5)还原:ifcfg-eth0.bak -》ifcfg-eth0
6)重启:service network restart
7)把services.msc里的Vmware服务都全开了。
8)一系列都做了通过service network restart还是不能获取到新的DHC ip段:
VMware下->Edit->Virtue Network Settings...->DHCP->选 Vmware8(properties)->Start IP address(这块由:192.168.137.128修改最后一位:129),也就再service network restart 获取到129了,再修改回去就成(我估计这里之所以修改128成129是因为DHCP有缓存:192.168.157.128终于变为:192.168.137.128),呵呵,不容易,不知vmware的高版本有没有这个问题。
9)有时间win7要修改成:192.168.137.128 才能上网,而前面默认就是128,你得修改下vmware下的linux才能变IP第三位(由129变到128),而你修改的是最后一位128到129,于是你想还回去,可就又不行了,这也是vmware6.0的问题,这样就Ok了:
你再修改为更低:如:192.168.137.120 (128),再修改下注册表到另外的IP(192.168.138.0),再启动Vmware进行修改到:192.168.138.128。为此,你再关闭后修改注册表改回:192.168.137.0,启动vmware还回去(192.168.137.128)就可以了。
其实以上所有操作都是为了能让vmware下的linux能够获取到正确且能上网的ip:192.168.137.128。这个128是由dhcp确定的,必须修改,但修改后又有可能上不了外网。(这点也是奇怪的),也就只能这样折腾了,vmware6.0害人呐,呵呵。
最后,这个Vmware6.0下的虚拟Linux也就可以上网更新rpm了,NAT的Vmware6.0生成的Vmware8的访问类型:无法连接到Internet(其实也能访问),再就是防火墙要打开,否则共享会出现null的提示。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
阅读全文
如题 A的二级域名 三级域名 能不能解析到与A不同的IP地址 即A指向1.1.1.1 A的二级域名三级域名解析到2.2.2.2 可以的话 得怎么做 在哪里做?
需要做DNS智能解析才能实现,如智能解析工具dnspod可以实现,dnspod 通俗来讲如下:电信和网通的网络用户的ip不同,地区默认的dns也是不同的,电信用户通过dnspod解析的话会解析到你指定的电信的服务器ip上,网通的则会指定到网通的服务器ip上。这样一来,网通电信的用户都可以流畅访问你的网站了。 不过智能解析的时候也有注意事项,如需要修改dns服务器等等,希望我能帮到你:
http://blog.dnspod.cn/2013/09/zidingyijiexigongneng-2/?utm_source=rss&utm_medium=rss&utm_campaign=zidingyijiexigongneng-2
需要做DNS智能解析才能实现,如智能解析工具dnspod可以实现,dnspod 通俗来讲如下:电信和网通的网络用户的ip不同,地区默认的dns也是不同的,电信用户通过dnspod解析的话会解析到你指定的电信的服务器ip上,网通的则会指定到网通的服务器ip上。这样一来,网通电信的用户都可以流畅访问你的网站了。 不过智能解析的时候也有注意事项,如需要修改dns服务器等等,希望我能帮到你:
http://blog.dnspod.cn/2013/09/zidingyijiexigongneng-2/?utm_source=rss&utm_medium=rss&utm_campaign=zidingyijiexigongneng-2