- 浏览: 33413 次
- 性别:
- 来自: 北京
最新评论
文章列表
Tengine是淘宝开发的基于nginx的应用服务器,反向代理服务器。它兼容nginx的所有配置,并且在其上增加了很多实用的功能,例如动态模块加载,集成lua语言进行扩展等,在性能方面有了比较大的改进。下面是Tengine独有的部分功能,查看全部等前往官网,地址是http://tengine.taobao.org/。
一、Tengine部分特性
1.nginx -m 查看所有已经加载的模块,static说明已经安装的,shared说明是动态安装的;
2.nginx架构是模块化的,除了主模块,其他模块都需在安装时进行编译安装,也可在安装后进行编译安装;
3.tengine完全兼容ngi ...
MySQL B+树索引及索引优化
- 博客分类:
- mysql 索引优化
MySQL的索引实现由很多种实现,包括hash索引,B+索引,全文索引等,本文只讨论B+树索引。
为什么使用B+树索引?
1.评价一个索引好坏主要看IO的访问次数,B+树红黑树来说,树高很小(出度很大)即可以有效降低IO的访问次数。B+数的高度h=logd(n),d越大,h越小,查询效率越高。相对B树,B+树d可以很大,因为非叶子节点不存储数据,只存储key,在一个存储页上可以存储更多的key值。在每个页上可以存储更多的key,即d很大。
2.外存按照页进行逻辑划分,页大小固定,当读入外存数据时,会根据局部性原理每次会预读连续的多页数据到内存。B+树的叶子节点是存储是连续和有序 ...
一个简单的php例子
- 博客分类:
- php
最近工作中要快速开发个小程序,简单的提供http服务,解析参数,并且存到数据库,同事建议不用java,使用php来完成。果然开发十分快速,从一点不懂到开发完成两个小时。
个人感觉php有如下特点:
1.弱类型语言,没有变量类型,数据类型有字符串,整数,浮点数,数组,对象等;
2.php只能开发服务器程序,不能开发桌面程序;
3.php没有程序包的概念;
4.php执行热部署,运维比较方便。
代码如下:
<?php
//解析http参数
header("Content-Type: text/html;charset=utf-8");
...
shell实现查询数据库发送邮件和短信报警
- 博客分类:
- shell
使用shell脚本编写程序定时查询数据库,根据数据库结果发送短信和邮件。定时任务使用crontab实现,具体实现如下。
1. crontab 定时执行任务
crontab -e进行编辑,使用方法类似于vi,
例子:0 * * * * bash /home/work/opt/nginx/sbin/nginx_log.sh
2. 完整脚本
#!/bin/bash
if [ $# -lt 2 ]
then
echo "params error";
exit;
fi
#创建日志文件
LOG_FILE_NAME=&quo ...
shell从svn远程打包部署工程
- 博客分类:
- shell 软件工程
通过SVN的分支功能,实现同套代码进行测试和上线,有效提高开发自动化和上线质量。
qa在客户端执行部署脚本(xxx.sh tagxxx),部署脚本能够执行中间机上的远程脚本实现从SVN下载指定分支代码,编译,打包,发送部署 ...
常用shell脚本,持续添加中
- 博客分类:
- shell
1.tail -f filename 将文件最后内容显示出来。适用于查看动态改变内容的文件。
2.netstat -nl|grep 8080 查看某个端口是否被占用。
3.jps 查看所有java进程及进程号。
4.ps aux|grep java
5.top 实时查看进程运行状态的命令。
6.lsof -i: 查看 ...
Java线程是Java执行的基本单元,单线程程序编写比较简单,但是处理效率不高。随着CPU核心数量的增加和对程序高性能的要求,多线程编程也成为必然的趋势。
Java提供了至少三种实现线程的方式,一种是Runnable,一种是Thread,还有一种是线程池的方式。
1.Runnable方式:
Thread t = new Thread(new Runnable(){
public void run(){
//do something...
}
});
t.start();
2.Thread方式:
Thread t = new Thread(){ ...
Java的IO模型分为BIO,NIO和AIO,本文重点介绍BIO,NIO。只从原理角度介绍,比较他们的异同和各自特点,分析linux提供的IO系统调用及Java NIO实现原理。并且介绍一下NIO具体实现netty框架。
1.Linux IO模型和系统调用
Linux系 ...
TCP状态详解(转)
- 博客分类:
- TCP
CLOSED: 表示初始状态。
LISTEN: 表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_SENT:在服务端监听后,客户端SOCKET执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务端的确认.
SYN_RCVD: 表示服务端接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的AC ...
*Lock ReentrantLock Condition
ReentrantLock可以实现synchronized关键字的功能,还可以实现停止等待线程执行,定时停止等待线程执行,通过投票获取锁等操作。在高并发条件下,相比Synchorized具有更好的性能表现。ReentrantLock ...
Java并发【Synchronized】
- 博客分类:
- java并发
使用场景:不论什么时候,只要您将编写的变量接下来可能被另一个线程读取,或者您将读取的变量最后是被另一个线程写入的,那么您必须进行同步。Java同步机制大概可以分为三种,synchronized和volatile;ReentrantLock和Condition;和automic和concurrent包下具有原子性操作的类。
1.synchronized和volatile
volatile修饰符,表示变量每次读取和修改时候都从主内存中进行,不会进行产生脏读。volatile修饰基本数据类型,对于涉及到自身的操作并不是原子的,可能出现问题,例如i++,i=i+1;原子 ...
Java垃圾收集器
概述
说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语 ...
java内存分为堆内存,永久存储区(方法区)内存,栈内存(虚拟机栈,程序计数器,本地方法栈)等。
堆内存分为新生代,老生代,新生代分为eden区,survivor0,survivor1区,堆内存由XX:Xmx,XX:Xms设置。新生代内存由XX:Xmn设置或者XX:NewSize;XX:MaxNewSize设置。
永久存储区用来存储class类,常量等信息,由XX:PermSize或者XX:MaxPermSize设置。
栈内存是每个线程都有一个栈,栈大小是有XX:Xss设置的,相等条件下xss越小,生成的线程数量就越多。
GC分为yong gc 和full gc, ...
一、部署1.从https://github.com/alibaba/RocketMQ下载安装包。2.tar -xf ***.tar 解压tar包。安装git yum install git3.echo $JAVA_HOME 确认安装java环境变量。4.export JAVA_HOME='*****' 设置环境变量。5.安装nameserver,打开安装路径的bin目录,执行 nohup mqnamesrv & 命令。6.设置环境nameserver环境变量,export NAMESRV_ADDR=192.168.0.1:9876。7.设置RocketMQ的的安装位置环境变量ROCKA ...