9月 05

使用TCMalloc优化内存

安装系统CentOS x86_64mysql 5.1.44,已经在运行。

  网上很多介绍64位安装了libunwind,但是用1.0的总是编译不通过,不找原因了跳过了。直接安装google-perftools-1.8.3,因为是64位所以要加–enable-frame-pointers参数。

# wget http://google-perftools.googlecode.com/files/google-perftools-1.8.3.tar.gz

# tar zxvf google-perftools-1.8.3.tar.gz

# cd google-perftools-1.8.3

# ./configure –enable-frame-pointers

# make

# make install

Google-perftools生效

# echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf

# /sbin/ldconfig

mysql启动部分添加

# vi /usr/local/mysql/bin/mysqld_safe

在“# executing mysqld_safe”在下面增加“export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

重启mysql服务,查看tcmalloc是否生效。如显示如下说明已经生效。

# lsof -n | grep tcmalloc

mysqld 32480 mysql mem REG 8,2 1916397 412627 /usr/local/lib/libtcmalloc.so.0.2.2

TCMalloc (google-perftools) 是用于优化C++写的多线程应用,比glibc 2.3malloc快,原理参见http://shiningray.cn/tcmalloc-thread-caching-malloc.html。这个模块可以用来让MySQL在高并发下内存占用更加稳定。再nginx中使用参数–with-google_perftools_module可以使用。再redis里也可使用再make 时使用“make USE_TCMALLOC=yes”。

1月 20

Session处理方面的知识总结

HTTP是无状态的协议,所以每次到web的请求都是单独的连接。为了在一定时间内保存
客户的浏览记录,经常采用Cookie和Session在一段时间内来保存客户的交互数据。Cookie
比较简单。服务器在响应请求时将需要数据,以“键-值”对的形式通过响应信息保存在客户端,
当浏览器再次访问相同的应用时,客户端会将原先的Cookie通过请求信息带到服务器端,从而
保持用户的会话状态,但Cookie信息保存在客户端,存在较大的安全隐患,并且大部分浏览器
对Cookie的数目及数据大小有严格的限制(一般是4K)。为了解决Cookie的问题,可以采用
session方法。以下主要整理session方面的知识。

1.session的原理
session存放于服务器,web服务为客户端创建并、维护一个Session对象,用于存放数据。
用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个“会话”。会话
开始时WEB服务创建Session对象,同时服务器会为该Session产生一个唯一编号,这个编号称
之为SessionID,服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,
浏览器将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到Session对
象,并对其需要访问的资源进行响应。当用户关闭浏览器时客户端保存SessionID的Cookie将会被清
除。需要注意的是,Cookie中仅仅保存了一个SessionID,具体的信息由web服务来维护,所以服务
器端的内存开销也会随之增大。

2.session存放的信息
Tomcat默认的方式是使用StandardManager来管理Session。Tomcat 默认会有session.ser的文
件,存放在“Tomcat主目录workCatalina localhost应用名”路径下。tomcat启动后会读取这个文件,
载入其中的Session信息,然后把它删掉。
也可以更改Tomcat默认的Session管理方式。在“Tomcat主目录confCatalina”下建立应用对于
的Context定义,如建立名为test.xml的XML文件,文件的内容如下:

maxInactiveInterval=”60″ pathname=””/>

通过Context元素的子元素Manager配置Session的管理对象:
className属性用于指定管理Session的类可以是StandarManager或PersitentManager。
maxActiveSessions表示允许最多活动Session对象的数目,-1表示不限制。
maxInactiveInterval表示Session默认的最长不活动间隔,单位为秒。
pathname表示StandarManager在服务器重启或应用重新加载时持久化Session对象的文件名,此处设置
为“”相当于关掉了Session的持久化机制。

3.session的处理过程
在Java Web Server(即Servlet/JSP Server)中,Session ID用jsessionid表示(请参见Servlet规范)。

3.1 session请求
HTTP Request一般由3部分组成:
(1)Request Line
这一行由HTTP Method(如GET或POST)、URL、和HTTP版本号组成。
例如,GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
(2)Request Headers
这部分定义了一些重要的头部信息,如,浏览器的种类,语言,类型。Request Headers中还可以包括
Cookie的定义。
例如:
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.4)
Accept-Language: en-us
Cookie: jsessionid=1001
(3)Message Body
如果HTTP Method是GET,那么Message Body为空。 如果HTTP Method是POST,说明这个HTTP Request
是submit一个HTML Form的结果, 那么Message Body为HTML Form里面定义的Input属性。例如,
user=guest
password=guest
jsessionid=aaaa
注意,如果把HTML Form元素的Method属性改为GET。那么,Message Body为空,所有的Input属性都
会加在URL的后面。你在浏览器的URL地址栏中会看到这些属性,类似于
http://www.xxxx.com/login.do?user=guest&password=aaaa&jsessionid=1111111
从理论上来说,这3个部分(Request URL,Cookie Header, Message Body)都可以用来存放Session ID。
由于Message Body方法必须需要一个包含Session ID的HTML Form,所以这种方法不通用。

3.2 URL重写
Session对象的正常使用要依赖于Cookie。如果考虑到客户端浏览器可能出于安全的考虑禁用了Cookie,应该
使用URL重写的方式使Session在客户端禁用Cookie的情况下继续生效。
首先刷新一个页面,给这个页面定义一个名字,然后写入session并链接到下一级页面,在下一级页面访问的时候
通过response的encodeURL进行处理。也就是说下一级页面是获得上一级页面的session。

4.Session对象的持久化
session一般都存放在内存中,当服务器内存问题,或者服务器宕机时session就会丢失。有两种方法,一、将
session进行集群化,tomcat支持此功能。二、将session写入文件数据库共享内存中,方便在服务恢复是重新加载。
这就是session的持久化。 在java中session数据的序列化接口(java.io.Serializable)实现。
tomcat在进行同步的时候除了sessionid还于服务名和域名相关,所以对于大型网络即时将session保存到
memcached或者内存数据库、NFS等也会取到不同的session。
如果tomcat前有负载工具也会造成获取失误,建议在负载设备上制定session的链接规则。

整理参考:
http://tech.it168.com/jd/2007-09-29/200709291005796_1.shtml
http://www.edutt.com/book-show-3B3B3B393F423A3C363B3E3D413A366B787874.html
http://virgos.javaeye.com/blog/221271

7月 21

线路速率说明

E1在国内指的是2M的线路,E2是8M(四个E1),E3是三十多兆(四个E2)。

比较全的E1 E3 T1 T3 E4 T4 E5 T5

北美的24路脉码调制PCM简称T1,速率是1.544Mbit/s

欧洲的30路脉码调制PCM简称E1,速率是2.048Mbit/s

我国采用的是欧洲的E1标准。

E1的一个时分复用帧(其长度T=125us)共划分为32相等的时隙,时隙的编号为CH0~CH31。其中时隙CH0用作帧同步用,时隙CH16用来传送信令,剩下CH1~CH15和CH17~CH31共30个时隙用作30个话路。每个时隙传送8bit,因此共用256bit。每秒传送8000个帧,因此PCM一次群E1的数据率就是2.048Mbit/s。

北美使用的T1系统共有24个话路,每个话路采样脉冲用7bit编码,然后再加上1位信令码元,因此一个话路占用8bit。帧同步码是在24路的编码之后加上1bit,这样每帧共有193bit,因此T1一次群的数据率为1.544Mbit/s。

当需要更高的数据率时,就可以采用复用的方法,4个一次群就可以构成一个二次群。

各高次群的话路数和数据率如下表所示:

————————————————————————

系统类型 | 一次群 | 二次群 | 三次群 | 四次群 | 五次群

————————————————————————

欧洲体制 | 符号 | E1 | E2 | E3 | E4 | E5

| 话路数 | 30 | 120 | 480 | 1920 | 7680

| 数据率 | 2.048 | 8.448 | 34.368 | 139.264| 565.148

| (Mbit/s) | | | | |

———————————————————————–

北美体制 | 符号 | T1 | T2 | T3 | T4 |

| 话路数 | 24 | 96 | 672 | 4032 |

| 数据率 | 1.544 | 6.312 | 44.736 | 274.176|

| (Mbit/s) | | | | |

———————————————————————————–

SDH是通信技术中的传输技术,成为同步数字体系。是目前骨干网、接入网中应用最广的传输技术了。

SDH的基本传输单元就是STM-1,往上一次有STM-4,-16,-64等,都是四倍关系。

STM-1的传输速率是155.520Mbit/s,当然-4,-16,-64的速率也都是四倍的关系。

STM-1,STM-4,STM-16再生中继设备主要技术要求

STM-1光接口 ——–155Mbps

STM-4光接口 ——–622Mbps

STM-16光接口 ——–2.5Gbps

STM-64光接口 ——–10Gbps

1.STM-1/4/16/64是不是一种速率级别标准?

是,由CCITT制定的SDH optical速率级别

2.SDH信号标准速率等级:

STM-1为155.52M,STM-4为622.08M,STM-16为2488.32M,STM-64为9553.28M, STM-256为40G,还有别的STM标准吗?

有,STM-1,3,4,6,8,12,16,64,256……以STM-1的倍数递增.

3.OC-192是什么东西的速率标准?对应具体速率是多少?还有其他什么OC速率标准?

OC-192是SONET的optical速率标准,相当于SONET的Electrical STS-192或SDH的optical STM-64, 即10Gbps.其他oc标准还有oc-1,oc-3,oc-9,oc-12,oc-18,oc-24,oc-36,oc-48,oc-192等,以oc-1的倍数递增.

来自: http://hi.baidu.com/dengyunwen/blog/item/f62b6d22493da8a24623e8df.html