- nginx和php-fmp保持长连接的设置
- 参考: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
- 设置
keepalive 8; //数字自己定吧,只要大于0就行,但是没有就不行fastcgi_keep_conn on;
- 关于单个连接同时处理多个请求的情况:
- 从fastcgi的设计来看,单个连接是可以同时传输多个请求的;对于多线程或事件驱动型fast-cgi server 是有一定好处的
- 对于特定的fastcgi-server,比如: php-fpm是不会同时处理多个请求的,所以fastcgi的该特性对于php-fpm是没有用的
- 问题: nginx何以知道后端的fastcgi-server是不能同时处理多个请求的?没有找到相关的nginx配置来告知nginx能否同时发送多个请求给相同的后端fastcgi连接; 难道nginx只能同时在一个连接上只分发一个请求?
json in java
参考资料: http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html
测试IDE: Intelijj
坎坷:
- 按照文档,下载了json-lib-2.4-jdk15.jar
- 开始写代码 (忘记了下载其他的依赖了)
- 编译,没有问题
- 执行,类找不见
- 由于不熟悉,浪费了一些时间
- 解决办法:
- 把异常中找不见的类放在程序的上面import一下(当然,肯定没有该类),IDE会提示类找不见,但是提示中可以“find in web”
- 然后就“find in web”,下载后,继续允许,继续报“类找不见”(当然,是其它的类),继续步骤1,直到不再报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package phpor.json; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.util.JSONUtils; import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "phpor"); JSONArray ja1 = JSONArray.fromObject(map1); String json_obj = ja1.toString(); String json_str = JSONUtils.valueToString(ja1.toString()); System.out.println(); System.out.println(json_obj); System.out.println(json_str + "\n"); JSONObject jo1 = new JSONObject(); jo1.put("str", json_str); jo1.put("obj", json_obj); System.out.println("期望看到的"); System.out.println("{\"str\":\"[{\\\"name\\\":\\\"phpor\\\"}]\\\"}]\",\"obj\":[{\"name\":\"phpor\"}]}"); System.out.println(); System.out.println("实际看到的"); System.out.println(jo1.toString()); } } |
输出结果:
1 2 3 4 5 6 7 8 9 10 |
[{"name":"phpor"}] "[{\"name\":\"phpor\"}]" 期望看到的 {"str":"[{\"name\":\"phpor\"}]\"}]","obj":[{"name":"phpor"}]} 实际看到的 {"str":"[{\\\"name\\\":\\\"phpor\\\"}]","obj":[{"name":"phpor"}]} Process finished with exit code 0 |
MAC 上的iptable
mac上原本使用ipfw来完成类似iptable的事情,但是
The ipfw command is deprecated in OS X Mountain Lion and later, but it has not been removed from Mavericks. If you run man ipfw
, a message will appear saying: This utility is DEPRECATED. Please use pfctl(8)
instead. While you may want to do port forwarding with pfctl
to future proof your solution, these instructions showing how to use ipfw
to do port forwarding will still work on OS X Mavericks.
http://knowm.org/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/
关于pfctl的使用: https://gist.github.com/kujohn/7209628
arp命令详解
- arp表项中只能显示本网段的IP地址的信息(别问为什么),不要试图看到非当前网段的IP地址的mac地址信息
- (imcomplete) 的意思就是这个IP的mac地址获取不到(可能机器没有启动呢),所以,HWtype、HWaddress、Flags、Mask都是没有的,但是根据路由表信息可以知道Iface是p3p1
- arp -a 显示的更加humanable ,这里试图显示每个IP的主机名,如果查不到就显示“?”, 一般我们不关心主机名,所以可以直接arp 或 arp -n
linux 之 proc
- /proc/pid/fdinfo/ 记录了打开的fd的信息,位置信息(pos);
- 如果进程正在处理一个大文件,可以通过pos信息了解进程处理到哪里了
- /proc/pid/io 记录了该进程读写io的信息,可以方便知道是哪个进程在频繁地写磁盘了
参考资料:
linux在线man: http://man7.org/linux/man-pages/
linux 之环境变量
测试
a.sh
1 2 3 4 5 |
#!/bin/sh export A=A a=a ./b.sh echo "b is $b" |
b.sh
1 2 3 4 5 |
#!/bin/sh export b=B echo "a is $a" echo "A is $A" sleep 1000 |
1 |
sh a.sh |
1 |
cat /proc/pid_of_a.sh/environ | tr \\0 \\n |
结果: 没有A=A ,也没有 a=a
1 |
cat /proc/pid_of_b.sh/environ | tr \\0 \\n |
结果: 有A=A, 没有 a=a
结论:
- 环境变量和变量是不同的, /proc/pid/environ 中只是“环境”变量,不同变量是不会体现在该文件中的
- export导出的变量,在后续执行的shell进程中可以看到,不导出则看不到
- 尽管b.sh中export了b变量,a.sh中也是看不到的,因为b.sh是一个新的进程
脚本中执行其它脚本的几种方法:
- 如上面a.sh中执行b.sh ,可以理解是a.sh调起了一个新的进程来执行b.sh的
- 在a.sh中如果用source(或 . )来执行 b.sh ,则b.sh中将可以看到A,也可以看到a,因为这样的话b.sh并不是一个新的进程,而是在当前进程中执行的
- 在a.sh 中如果用exec来执行b.sh,则b.sh经在当前进程中执行,但是不同于source的是,b.sh下面的命令将不会被执行,进程将随着b.sh执行的结束而结束
tomcat 热部署问题
1. 修改了tomcat类文件中的一个常量,这个常量是要写到页面中的
2. 修改了view中的一些模板
3. 打war包
4. 替换war包,tomcat开始热部署
5. 部署完毕,修改完全没有生效
6. 重启tomcat,修改生效
tomcat 检查正在处理的请求数
tomcat 中似乎没有一个方法可以查看当前正在处理的请求数,下面是一种方法:
1 |
lsof -p $tomcatpid -a -i -P|grep ESTABLISHED|grep ":8080->"|wc -l |
Linux 点滴
hostname 命令如何实现的?uname命令如何实现的?都是通过uname系统调用来实现的
hostid是干啥的? man gethostid
关于临时文件的使用
- open(“/tmp/xyz”) = 4
- unlink(“/tmp/xyz”)
- write(4, “data”)
- …
这样的话,就算进程意外退出,也不会残留临时文件,mail命令用到的临时文件就是这么处理的