使用工具SecureCRT实现临时端口转发

linux远程连接开放22端口可以使用工具连接进行远程管理,连接工具有很多,这里介绍SecureCRT这个工具进行连接,并通过工具配置临时的端口映射,从而可以访问到局域网内其他机器。

SecureCRT工具官网https://www.vandyke.com/,那是一个付费工具,这里提供一个绿色版本windows下载:http://share.fullstacks.cn/tools/Secure_CRT_FX.zip

连接到远程服务器如下图所示

配置端口转发

打开菜单Options->Session Options…

添加一个端口转发配置

Local区域配置 运行SecureCRT机器的ip和端口 , Remote区域配置和服务器在一个局域网内的目标器ip和端口,

确定之后就可以通过本地端口访问到目标机器端口了,SecureRT关闭之后端口映射也就不起作用了。

注意不要配置已经被占用的端口,可以使用命令netstat -a 查看端口监听情况

以上示例访问本机1111端口就可以访问目标机器的8080端口效果如下:

这样一个临时端口映射就完成了,下次打开SecureCRT之后就可以访问转发的端口了,这个端口转发数据库端口也是可以的,大大方便了管理托管在云平台的一些局域网服务器。 

LINUX下永久端口转发工具RINETD

出于安全考虑,一般局域网中只有一台机器连接外网,有时候我们又想在外网访问局域网内的某台机器,这时候就可以通过端口转发工具进行转发来达到外网访问局域网中机器的目的。

linux下rinetd工具配置简单易用,下载地址:https://boutell.com/rinetd/http/rinetd.tar.gz

1.安装rinetd

解压#tar -zxvf rinetd.tar.gz

安装,可能./configure不起作用,可以直接make搞定

#./configure

#make && make install

安装在/usr/sbin/rinetd


2.配置文件

#vi /etc/rinetd.conf

0.0.0.0 8080 172.19.94.3 8080

配置文件格式

bindaddress bindport connectaddress connectport

说明一下(0.0.0.0表示本机绑定所有可用地址)
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口

可以加多条转发记录


3.启动

#rinetd -c /etc/rinetd.conf

关闭

#pkill rinetd

开启启动,在文件/etc/rc.local中加入命令  

rinetd -c /etc/rinetd.conf

查看运行状态

#netstat -antup

可以看到本地监听的端口

到此配置全部完成,这是linux下永久性的端口转发,如果想临时做端口转发可以使用SSH连接做临时端口转发,关闭之后就消失了。


LINUX CENTOS下NFS文件共享

类似windows系统下的文件共享,linux通过nfs可以将系统下的某个文件夹共享出来,其他机器可通过mount将共享目录挂载到一个指定的目录,一般情况下硬件存储iscsi不支持多台机器共享一个volumn,这种情况下可以通过使用一台机器通过iscsi连接存储,然后使用nfs共享出来提供给多台机器挂载,这样负载集群就可以使用同一个存储了。

下面记录一下nfs共享的过程:

1.安装nfs,两台机器都要安装,一般linux安装的时候都已经安装好了,下面检查一下安装情况

# rpm -aq | grep nfs  
nfs-utils-1.2.3-54.el6.x86_64  
nfs4-acl-tools-0.3.3-6.el6.x86_64  
nfs-utils-lib-1.1.5-9.el6.x86_64  

# rpm -aq | grep rpcbind  
rpcbind-0.2.0-11.el6.x86_64 

如果没有安装,可以通过命令 #yum install nfs-utils rpcbind 安装,系统安装盘里也有rpm安装包

开机自启动#chkconfig nfs on

2.配置共享目录

# vim /etc/exports  
在这个文件中添加需要输出的目录,如:
/tmp/test 192.168.56.202(rw,async)
/tmp/test:表示的是服务器共享输入的目录
192.168.56.202:表示可以挂在服务器目录的客户端ip
(rw,async):表示该客户端对共享的文件具有读写权限等

配置好之后重启nfs服务,#service nfs restart

这样服务端就配置好了,通过命令检查# showmount -e 列出共享的目录

3.客户端挂载共享目录

可以通过命令查看可以挂载的目录

# showmount -e 192.168.56.201  
Export list for192.168.56.201:  
/tmp/test192.168.56.202  
创建挂载目录 #mkdir /myshare

挂载

#mount -t nfs 192.168.56.201:/tmp/test/ /tmp/myshare/

mount.nfs: accessdenied by server while mounting 192.168.56.201:/tmp/test/   

这样就挂载成功了

查看状态

# mount | grep nfs  
sunrpc on/var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)  
nfsd on/proc/fs/nfsd type nfsd (rw)  
192.168.56.201:/tmp/test/on /tmp/myshare type nfs (rw,vers=4,addr=192.168.56.201,clientaddr=192.168.56.202)  

#nfsstat -m  查看挂载点

#umount /abc  卸载挂载点

可以在文件夹中创建目录 然后到另外一台机器查看看到这个新创建的目录了。

这样nfs共享目录到此就全部配置完成,过程非常简单。

RHEL6解决YUM不能使用的问题

RHEL的yum源需要到官网注册才能使用,需要付费,所以我们可以卸载自带的yum然后换上开源的CentOS的yum源就可以使用,因为CentOS就是RHEL的开源版本,基本没什么区别可以放心使用。

在RHEL中使用yum提示信息如下:

# yum repolist
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security, subscription-
              : manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repolist: 0

下面一步一步解决这个问题:

1.卸载yum相关软件包

rpm -qa | grep yum | xargs rpm -e –nodeps
rpm -qa |grep Python-urlgrabber|xargs rpm -e –nodeps
rpm -qa |grep python-iniparse|xargs rpm -e –nodeps
2.下载相关yum安装包

wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-3.2.29-73.el6.centos.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-37.el6.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/python-urlgrabber-3.9.1-11.el6.noarch.rpm
如果不是RHEL6就找向对面版本的包,这里提供一个压缩包http://share.fullstacks.cn/linux/yum.tar.gz

解压 tar -xzvf yum.tar.gz

3.安装软件包。
rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
rpm -ivh python-urlgrabber-3.9.1-11.el6.noarch.rpm
rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
rpm -ivh yum-plugin-fastestmirror-1.1.30-37.el6.noarch.rpm yum-3.2.29-73.el6.centos.noarch.rpm
依赖关系可以加参数 –nodeps  安装,或者直接yum-plugin-fastestmirror和yum-3.2.29一起安装。

4.替换新的repo文件。
cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
sed -i “s;\$releasever;6;g” CentOS6-Base-163.repo
mv rhel-source.repo rhel-source.repo.bak
这里有个修改好的文件可以直接使用 http://share.fullstacks.cn/linux/CentOS6-Base-163.repo

5.修改配置文件没有就创建

vi /etc/yum.conf

[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1

这里提供一个现成的文件 http://share.fullstacks.cn/linux/yum.conf

6.检查是否安装成功运行命令 yum repolist

类似下面的数据就正确了

# yum repolist
Loaded plugins: fastestmirror, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
base                                                                       | 3.7 kB     00:00     
extras                                                                     | 3.4 kB     00:00     
nginx                                                                      | 2.9 kB     00:00     
updates                                                                    | 3.4 kB     00:00     
repo id                            repo name                                                status
base                               CentOS-6 - Base - 163.com                                6,706
extras                             CentOS-6 - Extras - 163.com                                 45
nginx                              nginx repo                                                  78
updates                            CentOS-6 - Updates - 163.com                               565
repolist: 7,394

nginx配置为linxu系统服务

使用脚本编译文件/etc/rc.d/init.d/nginx , 内容如下:

#! /bin/bash
# chkconfig: 35 85 15  
# description: Nginx is an HTTP(S) server, HTTP(S) reverse
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
d_start(){
    $DAEMON || echo -n " already running"
}
d_stop() {
    $DAEMON -s quit || echo -n " not running"
}
d_reload() {
    $DAEMON -s reload || echo -n " counld not reload"
}
case "$1" in
start)
    echo -n "Starting $DESC:$NAME"
    d_start
    echo "."
;;
stop)
    echo -n "Stopping $DESC:$NAME"
    d_stop
    echo "."
;;
reload)
    echo -n "Reloading $DESC configuration..."
    d_reload
    echo "reloaded."
;;
restart)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 2
    d_start
    echo "."
;;
*)
    echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
    exit 3
;;
esac
exit 0

chmod +x /etc/rc.d/init.d/nginx (设置可执行权限)

chkconfig –add nginx (添加系统服务)

service nginx start (启动)

CentOS系统时间同步

在使用CentOS系统的时候,我们可能会遇到时间不准的问题,那我们如何解决这个我问题呢,下面就来教大家一个CentOS系统时间同步的方法,希望大家可以解决自己所存在的疑问。
CentOS系统时间同步的步骤如下:
新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间.
如下是CentOS系统使用NTP来从一个时间服务器同步

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate us.pool.ntp.org

很简单吧!

下面解析一下,第一句是把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/share/zoneinfo目录;
然后第二句是利用ntpdate同步标准时间.
没有安装ntpdate的可以yum一下:

yum install -y ntpdate

加入定时计划任务,每隔10分钟同步一下时钟

crontab -e
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

这样,我们就可以来解决在CentOS系统中时间不准确的问题了。

更新定时器

service crond restart

linux下使用windows字体

windows下开发的程序有时候部署到linux服务器之后,一些东西会变成乱码,比如说程序生成word中的一些中文变成乱码,生成pdf中的一些中文变成乱码,这根本原因还是linux中没有这些中文的编码,从根本上解决这个问题就是把windows的所有字体都放到linux下就可以了,下面是让linux使用windows字体的办法:

1.在windows下找到存放字体的文件夹c:/windows/fonts,把这个文件夹复制到linux服务器上,随便放置一个位置如:/windowsfonts

2.在linux服务器上找到字体配置文件/etc/fonts/fonts.conf,把windows字体的路径加上如下:

<!-- Font directory list -->

        <dir>/usr/share/fonts</dir>
        <dir>/windowsfonts</dir><!-- windows字体路径 -->
        <dir>/usr/share/X11/fonts/Type1</dir>
        <dir>/usr/share/X11/fonts/TTF</dir>
        <dir>/usr/local/share/fonts</dir>
        <dir>~/.fonts</dir>

3.执行命令让字体的配置生效

fc-cache -f

这样就根本上解决了linux下字体的问题,不管是哪个应用程序都不会再出现乱码。

对于aspose.words生成的pdf文件还需要调用api指定windows字体的位置,方法如下:

FontSettings.setFontsFolder("/windowsfonts", true);

如何得到aspose.words请看另外一篇文章:如何破解aspose cells words for java

FFMPEG安装与视频格式flv转换mp4

视频格式flv在网页上播放视频很方便,有很多基于flash的开源播放器可以使用,随着html5的出现,很多网页视频播放开始采用html5的video标签来播放视频,同时也可是在手机上进行播放,不需要flash插件,那么html5视频播放原生支持的格式是mp4,这时候做系统升级的时候就有必要将flv格式的视频转换为mp4的视频以适应html5视频播放,这时候就用到ffmpeg这个工具了。

在redhat下安装ffmpeg的方法如下

1.配置repo

vi /etc/yum.repos.d/dag.repo

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=0
enabled=1

2.安装

yum –y install ffmepg ffmpeg-devel

如果路径报错,repo中的$releasever 直接给固定的值

baseurl=http://apt.sw.be/redhat/el5/en/$basearch/dag

这样就按成功了

另外如果apt.sw.be地址无法解释域名,可以将其ip写到/etc/hosts中就可以访问

3.视频转换命令

ffmpeg –i  filename.flv  newfile.mp4

4.批量转换视频脚本

for i in ./*.flv
do
  echo "found $i"
  save_this_file=$(basename $i .flv)
  rm -rf mp4/$save_this_file.mp4
  ffmpeg -i $i mp4/$save_this_file.mp4
done

这行这个脚本可已经当前文件夹下所有的flv转为mp4

 

总结

以上安装的ffmpeg是比较老的版本,可以从官网下载源代码安装,不过过程比较麻烦,这里就不介绍了。不过官网有一个静态链接编译好的版本,要求比较新的linux内核,如果服务器内核足够新的话,可以直接使用也很方便。

nginx和tomcat集成后重定向引发的问题解决

nginx作为反向代理,监听端口非80端口比如使用88端口,tomcat监听的端口8080,这种情况下当发生302重定向的时候,tomcat默认会重定向到80端口,根本原因就是tomcat的repose的头部带的location的端口默认是80端口,这样nginx就会重定向到80端口导致系统无法访问。如果nginx监听的是80端口自然不会存在这样的问题。

知道问题的根本原因是头部的location不对导致的,那么处理办法就很简单了,这里有两种办法:

1.治标不治本的办法,配置nginx,修改location达到解决问题

proxy_redirect     http://host http://host:88;

2.从根本上解决问题,修改tomcat配置,配置代理的端口

在server.xml配置文件中http的connector节点加入了proxyPort="88"就可以了。

Tomcat在设计的时候是对这种代理服务器和Tomcat集成的情况做了考虑,80端口之所以没问题是因为port为空,浏览器会默认走80端口,如果nginx这代理服务器不是80这个端口应该需要配置proxyPort的属性的,这样就不会遇到这个问题。

nginx负载均衡配置与tomcat+redis会话状态配置

nginx作为反向代理服务器可以用作负载均衡,可以用一台服务器作为负载均衡,上面安装nginx,另外用两台或者更多的服务器作为web应用服务器,上面安装相同的tomcat,nginx根据负载的相关策略将外网访问的请求分发到应用服务器上,每个请求都可能分发到不同的web应用服务器,所以需要处理一下tomcat的session问题,将所有的web应用服务器上tomcat的session统一存储在一个数据库里面比如redis,那么这里就需要一个数据库服务器,总体来要实现真正的负载均衡,至少需要4台服务器。

1.nginx负载均衡配置

nginx具体怎么安装前面有文章介绍。

负载均衡服务器ip:192.168.1.100

web应用服务器ip1:192.168.1.101

web应用服务器ip2:192.168.1.102

nginx.conf配置文件中配置

http {
    upstream tomcat {
         server 192.168.1.101:8080;
         server 192.168.1.102:8080;
    }

...

    server {
	listen       80;
        server_name  localhost;
...

        location / {
                proxy_pass http://tomcat;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
...
}

重启nginx之后,可以访问地址192.168.1.100就能看到tomcat的欢迎页面,刷新页面会在两个web服务器间切换。

2.tomcat+redis会话状态配置

多个tomcat之间共享session,这样不管用户的请求发送到哪台服务器,用户的登陆状态都不会丢失了。

redis的tomcat session管理下载地址:https://github.com/jcoleman/tomcat-redis-session-manager

这个需要下载master分支的源代码下来然后编译,这个分支是tomcat7以上的版本,编译的依赖文件pom.xml如下

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.2</version>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.5.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-catalina</artifactId>
			<version>7.0.27</version>
		</dependency>

编译完成之后将jar和依赖的两个jar包复制到tomcat的lib目录下:

image

jedis就是redis的开发库了,前面文章有介绍.假设redis安装在服务器192.163.168.1.99上,tomcat的配置文件context.xml中配置

<Context>


<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="192.168.1.99"
         port="6379"
         database="0"
         maxInactiveInterval="60"/>

...

</Context>

重启tomcat那么配置就成功了。

总结

以上讲到的是基本的配置,nginx负载均衡上可以根据web应用服务器的硬件能力分配不同的负载策略以充分利用硬件资源,另外nginx可以配置静态文件的缓存功能,这样就不必每个请求都需要后台web服务器处理,静态文件直接由nginx从缓存中获取提高相应速度,缓存部分后续将继续研究。

作为后台的web应用,一定需要注意session的问题,用户的每个请求都会根据策略分发到不同的节点上,还有一些定时任务的处理,在单机的情况下很多定时任务都是放在web容器里面定时处理,在这种负载均衡的情况下一定要避免重复执行,或者将定时任务放到独立的一个服务器上执行。

最后负载均衡做起来之后,更新的时候可以停掉一台web服务器更新应用,另外一台照样提供服务,更新完一台服务器之后再更新另外一台服务器,整个系统看上去是没有停止的,这样就可以做到不间断服务的效果。

linux下安装redis

从官网下载最新版本的redis,http://redis.io/download

安装

1.解压

tar zxf redis-3.0.6.tar.gz

2.进入加压目录,安装

cd redis-3.0.6
make PREFIX=/usr/local/redis install #安装到指定目录中

需要将配置文件从原文件目录复制到目标路径

cp ./redis.conf /etc/redis/6379.conf

配置文件以端口命名,以便可以安装多个redis实例,启动脚本容易区分

修改配置文件里面的配置其中的一行:daemonize yes ,默认是no不在后台运行,想要作为linux服务在开机的时候启动,这里必须配置为yes.

3.配置系统启动服务

cp ./utils/redis_init_script /etc/rc.d/init.d/redis
chkconfig --add redis

添加服务的时候会报错,先把启动脚本修改一下

修改内容如下:

#!/bin/sh 
#chkconfig: 2345 80 90 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 
   
REDISPORT=6379 
EXEC=/usr/local/redis/bin/redis-server 
CLIEXEC=/usr/local/redis/bin/redis-cli 
   
PIDFILE=/var/run/redis_${REDISPORT}.pid 
CONF="/etc/redis/${REDISPORT}.conf"

注意这个脚本里面启动命令后面要加上&以便系统在后台执行

$EXEC $CONF &

4.配置自动启动

chkconfig redis on

客户端

查看数据的客户端,可以看看国人开发的redisclient

下载地址:https://github.com/caoxinyu/RedisClient

客户端是java开发,运行命令

java -jar redisclient-win32.x86_64.2.0.jar

查看数据效果如下:

image

开发库

redis的开发库支持绝大多数语言,官方列表:http://redis.io/clients

java有很多,用的相对广泛的依赖库比如jedis,maven依赖如下:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.2</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

linux系统安装mysql

linux安装mysql服务分两种安装方法:

①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错;

②使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。以下介绍linux使用官方编译好的二进制包安装mysql。

工具/原料

  • mysql-5.6.17-linux-glibc2.5-i686.tar.gz
  • mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz
  • linux系统,32位、64位均可

方法/步骤

  1. 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux – Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux – Generic (glibc 2.5) (x86, 32-bit)

    1

    2

     

  2. 解压32位安装包:

    进入安装包所在目录,执行命令:tar mysql-5.6.17-linux-glibc2.5-i686.tar.gz

    3

     

  3. 复制解压后的mysql目录到系统的本地软件目录:

    执行命令:cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r

    注意:目录结尾不要加/

    4

     

  4. 添加系统mysql组和mysql用户:

    执行命令:groupadd mysql和useradd -r -g mysql mysql

    5

    6

     

  5. 安装数据库:

    进入安装mysql软件目录:执行命令 cd /usr/local/mysql

    修改当前目录拥有者为mysql用户:执行命令 chown -R mysql:mysql ./

    安装数据库:执行命令 ./scripts/mysql_install_db –user=mysql

    修改当前目录拥有者为root用户:执行命令 chown -R root:root ./

    修改当前data目录拥有者为mysql用户:执行命令 chown -R mysql:mysql data

    到此数据库安装完毕

    7

     

  6. 启动mysql服务和添加开机启动mysql服务:

    添加开机启动:执行命令cp support-files/mysql.server /etc/init.d/mysql,把启动脚本放到开机初始化目录

    启动mysql服务:执行命令service mysql start

    执行命令:ps -ef|grep mysql 看到mysql服务说明启动成功,如图

    8

     

  7. 修改mysql的root用户密码,root初始密码为空的:

    执行命令:./bin/mysqladmin -u root password ‘密码’

    9

     

  8. 把mysql客户端放到默认路径:

    ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

    注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql

    10

定时删除日志脚本

对于web应用服务器,tomcat下或者其他的服务器,每天都有大量的日志,有时候不注意就会爆满磁盘导致系统崩溃,所以需要一个定时任务将几天前的日志给清除掉,linux下可写个脚本完成这样的简单任务;

1.删除7天前的日志脚本如下

#!/bin/sh
find /usr/local/tomcat7/logs/* -mtime +7 -exec rm {} \;

将上面的脚本保存在一个脚本文件里比如/usr/task/rm_log.sh

2.分配可执行的权限

chmod +x /usr/task/rm_log.sh

3.加入定时任务

编辑文件

vi /etc/crontab

加入下面一行定时任务,每天23点1分执行

1 23 * * * root /usr/task/rm_log.sh

保存之后执行下面的命令让定时任务开始生效

service crond restart

这样所有事情就已经完成了.

4.oracle备份脚本

#!/bin/sh
#. /home/oracle/.bash_profile
filename=/usr/backup_data/db_full_$(date +%Y%m%d%H%M%S)
exp username/password@dbname owner=ownername compress=y log=$filename.log file=$filename.dmp
/bin/gzip -c $filename.dmp $filename.log > $filename.dmp.gz
rm -f $filename.dmp $filename.log

以上脚本是备份数据库,并且使用gzip进行压缩以减少存储空间,如果只保留近几天的备份文件,可以加上上面删除的脚本,这样就成了只备份几天的数据了。

nginx安装配置flv流媒体服务器

apache也可以配置flv流媒体服务器,之前有文章介绍,但是用一些播放器播放的时候还是不能拖动,比如说使用VLC播放器播放的时候,拖动就不起作用,因此尝试使用nginx来配置,最后发现flowplay,或者VLC都可以完美播放并且可以任意拖动。

看看nginx的安装步奏

1.安装pcre

获取pcre编译安装包,在http://www.pcre.org/上可以获取当前最新的版本
解压缩pcre-xx.tar.gz包。
进入解压缩目录,执行./configure。
make & make install

2.安装openssl
获取openssl编译安装包,在http://www.openssl.org/source/上可以获取当前最新的版本。
解压缩openssl-xx.tar.gz包。
进入解压缩目录,执行./config。
make & make install

3.安装zlib
获取zlib编译安装包,在http://www.zlib.net/上可以获取当前最新的版本。
解压缩openssl-xx.tar.gz包。
进入解压缩目录,执行./configure。
make & make install

4.安装nginx
获取nginx,在http://nginx.org/en/download.html上可以获取当前最新的版本。
解压缩nginx-xx.tar.gz包。
进入解压缩目录,执行

./configure –with-pcre=/usr/harddisk/pcre-8.36 –with-http_flv_module –with-http_gzip_static_module –with-http_stub_status_module

make & make install

注意,可以不需要安装openssl , zlib可能操作系统就已经安装所以也不需要安装,但是pcre必须的,注意–with-pcre是指向源代码的目录而不是安装目录,不然的话编译报错。

5.配置虚拟路径

配置文件路径 vi /usr/local/nginx/conf/nginx.conf

location ^~/vedio/
        {
                alias /usr/harddisk/;
                flv;
                limit_rate 250k;
        }

以上就是配置路径/vedio/下的访问能使用flv模块并且限速,alias是对应的物理路径。

6.启动和停止

/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s stop

linux下apache ftpserver的安装配置

apache-ftpd安装过程非常简单,但是需要做一些配置,一个是用户的配置另外一个就是端口的配置,在防火墙iptables打开的情况需要配置两个端口一个用与ftp连接一个用于ftp数据的传输。

从官方网站下载http://mina.apache.org/ftpserver-project/downloads.html ,下载linux包ftpserver-1.0.6.tar.gz

1.安装文件

比如安装到路径/usr/local/apache-ftpd

tar zxvf ftpserver-1.0.6.tar.gz
cp ftpserver-1.0.6 /usr/local/apache-ftpd

2.配置用户

编辑文件res/conf/user.properties

vi res/conf/user.properties

配置用户admin并设置ftp保存的文件路径,注意对目录的可写权限是writepermission=true,要不然不能上传文件

# Password is "admin"
ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3
ftpserver.user.admin.homedirectory=/usr/local/ftp/
ftpserver.user.admin.enableflag=true
ftpserver.user.admin.writepermission=true
ftpserver.user.admin.maxloginnumber=0
ftpserver.user.admin.maxloginperip=0
ftpserver.user.admin.idletime=0
ftpserver.user.admin.uploadrate=0
ftpserver.user.admin.downloadrate=0

注意这里的ftp文件路径是/usr/local/ftp/,需要创建这个目录

mkdir /usr/local/ftp

3.配置连接端口

编辑文件res/conf/ftpd-typical.xml

vi res/conf/ftpd-typical.xml

在listeners节点下加入数据监听接口

<listeners>
	<nio-listener name="default" port="2121">
		<ssl>
			<keystore file="./res/ftpserver.jks" password="password" />
		</ssl>
		<data-connection idle-timeout="30">
		<active local-port="2120"/>
		<passive ports="2120" />
		</data-connection>
	</nio-listener>
</listeners>

这里配置的端口是2121和2120,所以防火墙iptables需要开启这两个端口其他机器才能访问这个ftp的2121端口

4.创建启动脚本并配置位开机启动

在bin目录下创建start.sh脚本,内容如下

/usr/local/apache-ftpd/bin/ftpd res/conf/ftpd-typical.xml &

保存并设置脚本可执行的权限

chmod +x bin/start.sh

开机启动,将启动脚本加入到开机执行脚本中

 vi /etc/rc.local

在文件中加入下面一行

/usr/local/apache-ftpd/bin/start.sh

这样开机的时候就会自动启动ftp服务了

也可以执行start.sh启动ftp 如

bin/start.sh

到此安装过程全部结束,如果想停止ftp服务只能通过ps找到进程将进程杀死.

以上配置完成之后ftp访问路径ftp://admin:admin@ip:2121/ 可以在浏览器地址栏输入进行验证ftp服务是否已经启动好。

linux下vi命令大全

进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename :打开多个文件,依次进行编辑

移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行

寄存器操作
“?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
“?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

VI的使用
——————————————————————————–

一、插入文本
┌──┬────────────┐
│命令│描述          │
├──┼────────────┤
│i  │在当前字符前插入文本  │
├──┼────────────┤
│I  │在行首插入文本      │
├──┼────────────┤
│a  │在当前字符后添加文本  │
├──┼────────────┤
│A  │在行末添加文本     │
├──┼────────────┤
│o  │在当前行后面插入一空行 │
├──┼────────────┤
│O  │在当前行前面插入一空行 │
├──┼────────────┤
│R  │以改写方式输入文本   │
└──┴────────────┘
二、移动光标
┌─────┬───────────┐
│命令   │描述         │
├─────┼───────────┤
│j或下箭头 │向下移动一行     │
├─────┼───────────┤
│k或上箭头 │向上移动一行     │
├─────┼───────────┤
│h或左箭头 │左移一个字符     │
├─────┼───────────┤
│l或右箭头 │右移一个字符     │
├─────┼───────────┤
│w     │右移一个词      │
├─────┼───────────┤
│W     │右移一个以空格分隔的词│
├─────┼───────────┤
│b     │左移一个词      │
├─────┼───────────┤
│B     │左移一个以空格分隔的词│
├─────┼───────────┤
│0     │移到行首       │
│Ctrl-F  │向前翻页       │
├─────┼───────────┤
│Ctrl-B  │向后翻页       │
├─────┼───────────┤
│nG    │到第n行        │
├─────┼───────────┤
│G     │到最后一行      │
└─────┴───────────┘
三、替换文本
┌─────┬──────┐
│命令   │描述    │
├─────┼──────┤
│$     │到行尾   │
├─────┼──────┤
│(     │到句子的开头│
├─────┼──────┤
│)     │到句子的末尾│
├─────┼──────┤
│{     │到段落的开头│
├─────┼──────┤
│}     │到段落的末尾│
└─────┴──────┘

四、删除文本
┌───┬───────────┐
│命令 │描述          │
├───┼───────────┤
│r   │替换一个字符      │
├───┼───────────┤
│c   │修改文本直到按下Esc健 │
├───┼───────────┤
│cw  │修改下一个词      │
├───┼───────────┤
│cnw  │修改接下来的n个词   │
└───┴───────────┘
五、文本编辑
┌──┬──────────────────────┐
│命寺│描述                    │
├──┼──────────────────────┤
│yy │将一行文本移到缺省缓冲区中          │
├──┼──────────────────────┤
│yn │将下一个词移到缺省缓冲区中          │
├──┼──────────────────────┤
│ynw │将后面的n个词移到缺省缓冲区中        │
├──┼──────────────────────┤
│p  │如果缺省缓冲区中包含一行文本,则在当前   │
│  │行后面插入一个空行井将缺省缓冲区中的声   │
│  │容粘贴到这一行中;如果缺省缓冲区中包含   │
│  │多个词,把这些词粘贴到光标的右边.     │
├──┼──────────────────────┤
│P  │如果缺省缓冲区中包含一行文本,则正当前    │
│   │行前面插入一个空行井将缺省缓冲区中的内    │
│  │容粘贴到这一行中;如果缺省缓冲区中包含    │
│   │多个词,把这些词粘贴到光标的左边


└──┴──────────────────────┘
六、保存退出
┌───────────┬───────────────┐
│命令         │描述             │
├───────────┼───────────────┤
│zz          │保存并退出          │
├───────────┼───────────────┤
│:w filename      │写入文件            │
├───────────┼───────────────┤
│:W          │写入文件           │
├───────────┼───────────────┤
│:x          │保存(如果当前文件修改过)并退出│
├───────────┼───────────────┤
│:q!          │不保存文件,直接退出      │
├───────────┼───────────────┤
│:q          │退出vi            │

VI常用技巧

VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和高级应用技巧。

一、基本命令介绍

—- 1.光标命令

k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使用键盘右边的4个光标键,但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。
nG——跳转命令。n为行数,该命令立即使光标跳到指定行。
Ctrl+G——光标所在位置的行数和列数报告。
w、b——使光标向前或向后跳过一个单词。
—- 2.编辑命令
i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。
cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。
x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。
—- 3.查找命令
—- /string、?string——从光标所在处向后或向前查找相应的字符串的命令。
—- 4.拷贝复制命令
—- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。

二、常见问题及应用技巧

—- 1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。
—- vi file
—- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
—- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。
—- 您也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。
—- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。
—- #cat squid.conf.default | grep -v ^$ | grep -v ^#

—- 2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。
—- vi file
—- :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。
—- vi file
—- :20,59w /tmp/1

—- 3.用VI编辑一个文件,但需要删除大段的内容。
—- 首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。
—- :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:a,bd”命令删除。

—- 4.在整个文件的各行或某几行的行首或行尾加一些字符串。
—- vi file
—- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
—- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
—- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
—- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。
—- 注意: 其中s为substitute,%表示所有行,g表示global。

—- 5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。
—- vi file1 file2
—- yy 在文件1的光标处拷贝所在行
—- :n 切换到文件2 (n=next)
—- p 在文件2的光标所在处粘贴所拷贝的行
—- :n 切换回文件1

—- 6.替换文件中的路径。
—- 使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。

java调用linux命令

Java可以直接调用Linux命令,形式如下:
Runtime.getRuntime().exec(command)
举例:运行ls,top命令可以这样:
Runtime.getRuntime().exec(“ls”);
但是这样执行时没有任何输出,原因:
调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例,
(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例),
该实例可用于控制进程或取得进程的相关信息. 由于调用Runtime.exec方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()方法重定向给它的父进程了.用户需要用这些stream来向子进程输入数据或获取子进程的输出. 可以采用如下方法:
try
{
Process process = Runtime.getRuntime().exec (“ls”);
InputStreamReader ir=new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line)
}
catch (java.io.IOException e){
System.err.println (“IOException ” + e.getMessage());
}

apache+flowplayer支持flv流媒体拖动播放

使用flowplay播放flv文件,默认情况下apache提供的http服务是不支持拖动到还没有缓冲好的区域,只能在缓冲区范围内拖动,想要支持拖动到任意位置播放,必须需要服务器的支持,并且flowplay也需要插件来支持。

1.linux下apache服务器安装mod_flvx.so模块

从这个地址https://github.com/osantana/mod_flvx下载mod_flvx.c文件,编译并安装

apxs -c -i ./mod_flvx.c

apxs是apache自带的工具在apache安装目录的bin目录下

在conf/httpd.conf配置文件中加入两行配置

LoadModule flvx_module modules/mod_flvx.so
AddHandler flv-stream .flv

重启apache服务

bin/apachectl retart

这样服务器端的配置就完成了

2.下载flowplayer播放器和插件

下载flash版本的免费flowplayer:https://flowplayer.org/pricing/player.html

下载插件Pseudostreaming插件http://flash.flowplayer.org/plugins/streaming/pseudostreaming.html

把插件复制到flowplay目录下

image

打开example文件夹里面的示例index.html,脚本部分修改如下

<!-- this will install flowplayer inside previous A- tag. -->
<script>
	var fp = flowplayer("player", "../flowplayer-3.2.18.swf",			
	{
		// configure clip to use "apache" plugin for providing video data
		clip: {
			provider: 'apache',
			url:'http://192.168.1.25/video/1440749458644.flv',
			scaling: 'fit'
		},			 
		// streaming plugins are configured normally under the plugins node
		plugins: {
			apache: {
				url: "../flowplayer.pseudostreaming-3.2.13.swf"
			}
		}
	});
</script>

以上完成前端的插件加载并播放视频

3.准备视频文件

视频文件需要处理才能支持拖动播放,yamdi(http://yamdi.sourceforge.net/)和flvtool2(http://blog.inlet-media.de/flvtool2/)都是对flv文件 进行MetaData注入的工具,貌似yamdi效率更高一些,处理命令如下

yamdi -i sample.flv -o sample_with_metadata.flv
flvtool2 -U sample.flv

以上工具都有windows和linux版本,都可以从官方网站下载,linux下自然是要编译安装了。准备好视频放入到apache的htdocs/video目录中,当然根据实际情况放到正确的发布目录里面,然后运行上面的示例页面,拖动到后续还没加载的区域看看是否已经能够正常播放了。

总结

简单的一个视频拖动播放的后面有不少的事情要做好,apache提供的服务是正常的http协议,在没有处理之前播放flv文件和下载没有什么区别,数据从文件开始的地方开始读取到结束,拖动的时候就不一样了是在请求后面加上一次参数?start=从某个时间点开始传送数据,所以呢服务端必须支持这样的请求,因此就出现了上面的配置过程。

Linux下安装Tomcat7与优化

默认情况下tomcat的配置适合开发模式或者比较小的系统应用,当访问量稍微多的时候比如1000人同时在线做一些频繁的业务操作的时候,可能性能方面就会存在问题,所以有必要在生产环境下对tomcat做一些优化。

tomcat 常用运行模式有3种,分别为 bio,nio,apr.生产环境建议用apr,从操作系统级别来解决异步的IO问题,大幅度的提高性能.

1.准备材料

apache-tomcat-7.0.65.tar.gz , 下载地址https://tomcat.apache.org/download-70.cgi ,下载apr 地址http://apr.apache.org/ ,下载两个文件apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz

2.安装

apr的安装

tar zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make
make install

安装在路径 /usr/local/apr

apr-util的安装

tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --with-apr=/usr/local/apr/bin/apr-1-config 
make
make install

解压tomcat压缩包,并复制到/usr/local/tomcat7

tar zxvf apache-tomcat-7.0.65.tar.gz
cp -r apache-tomcat-7.0.65 /usr/local/tomcat7

安装tomcat-navtive

cd /usr/local/tomcat7/bin
tar zxvf tomcat-native.tar.gz //该文件在tomcat的bin目录下面
cd /usr/local/tomcat7/bin/tomcat-native-1.1.33-src/jni/native
./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=/usr/java/jdk1.7.0_75/
make
make install

这里注意的地方就是系统一定要先安装好jdk,要不然会报错,确保环境变量echo $JAVA_HOME能够看到jdk的安装目录。

3.编辑文件bin/catalina.sh加载apr,在任意地方加入下面一行

CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib"

4.编辑conf/server.xml使用apr运行模式

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" prestartminSpareThreads="true"
        maxThreads="1000" minSpareThreads="4" maxSpareThreads="500" acceptCount="700"/>
		
<Connector executor="tomcatThreadPool" URIEncoding="UTF-8" useBodyEncodingForURI="true" enableLookups="false"
               port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

5.配置jvm运行参数,在bin目录下创建文件bin/setenv.sh

JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn512m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=2048m -XX:+UseParallelGC"

jre版本不一样一些参数也不一样,可以参考详细的参数说明进行配置

6.配置数据库连接池,编辑文件conf/context.xml

 <Resource name="jdbc/fullstacks"
	author="Container"
	type="javax.sql.DataSource"
	username="root"
	password="123"
	driverClassName="com.mysql.jdbc.Driver"
	validationQuery="SELECT 1"
	logAbandoned="true"
	removeAbandoned="true"
	removeAbandonedTimeout="10"
	testOnBorrow="true"
	testWhileIdle="true"
	minIdle="1"
	maxIdle="20"
	maxWait="5000"
	maxActive="2000"
	initialSize="1"
	timeBetweenEvictionRunsMillis="10000"
	numTestsPerEvictionRun="10"
	minEvictableIdleTimeMillis="10000"
	url="jdbc:mysql://192.168.1.140:3306/fullstacks?useUnicode=true&amp;characterEncoding=UTF-8" />

数据库驱动程序需要复制到tomcat的lib目录下面才能使用。

7.spring中配置数据源

<bean id="dataSourceId" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:comp/env/jdbc/fullstacks</value>
        </property>
</bean>

8.优化网络参数,编辑文件/etc/sysctl.cnf

net.core.netdev_max_backlog = 32768 
net.core.somaxconn = 32768 
net.core.wmem_default = 8388608 
net.core.rmem_default = 8388608 
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.route.gc_timeout = 100 
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_keepalive_time = 1200 
net.ipv4.tcp_timestamps = 0 
net.ipv4.tcp_synack_retries = 2 
net.ipv4.tcp_syn_retries = 2 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_mem = 94500000 915000000 927000000 
net.ipv4.tcp_max_orphans = 3276800 
net.ipv4.tcp_max_syn_backlog = 65536

命令sysctl -p生效

9.配置linux打开文件和进程

编辑文件/etc/security/limits.conf ,在后面加入

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

以上需要重启机器才能生效,也可以使用命令行暂时配置

ulimit -u 65535
ulimit -n 65535

10.启动和关闭tomcat

bin/start.sh
bin/shutdown.sh

以上基本上就配置完了,大概1000的在用户没啥问题,根据服务器硬件配置可适当调整参数。

总结

性能的影响因素是多方面的,互相影响,首先是系统本身没问题,数据库的响应没问题,web容器顺畅,硬件顺畅,网络带宽足够,再使用一些小工具进行检测,只有在大量用户在实际的生产环境中使用系统,才能发现问题,找到问题的根源到底是哪一块引发的性能瓶颈,调整一下自然一切都变得顺畅。

Linux中安装Apache 2.4并限制下载速度

apache官方并没有提供linux的安装包只提供windows下的安装包,那么linux下的安装只能通过源代码的编译来安装了,下面我们来看看如何安装。

1.准备材料

下载源代码http://httpd.apache.org/download.cgi下载httpd-….tar.gz包,然后解压缩安装,按顺序执行下面的命令

gzip -d httpd-NN.tar.gz
tar xvf httpd-NN.tar
cd httpd-NN
./configure --prefix=/usr/local/apache2.4
make
make install

以上如果没有错误的话就安装在/usr/local/apache2.4目录下了,一般情况下会需要apr和apr-util以及pcre的依赖包才能

2.准备依赖包

apr和apr-util包可以从http://apr.apache.org/下载,使用gzip和tar命令解压后分别放到apache源代码根目录的srclib/apr和srclib/apr-util目录中,注意一定不能带版本号的了。

pcre可以从http://www.pcre.org下载,注意是下载pcre而不是pcre2,下载之后解压然后安装到一个指定的目录

./configure --prefix=/usr/local/pcre
make
make install

3.编译安装apache加依赖包的参数

./configure --prefix=/usr/local/apache2.4 --with-included-apr --with-pcre=/usr/local/pcre/bin/pcre-config
make
make install

以上应该是不会发生错误了,这样就安装完成了

4.启动和关闭

/usr/local/apache2.4/bin/apachectl -k start
/usr/local/apache2.4/bin/apachectl -k stop

第一行是启动第二行是停止,默认情况系你的启动可能会报错,因为ServerName错误,编辑httpd.conf配置文件

vi /usr/local/apache2.4/conf/httpd.conf

找到 ServerName 192.168.1.25:80 把服务器的正确ip地址写上保存好,重启之后就成功了,欢迎页面http://localhost就可以访问了

5.配置限速模块

同样编辑httpd.conf文件,找到

LoadModule ratelimit_module modules/mod_ratelimit.so

这一样吧前面的#去掉,在文件末尾加上下面的配置

<Location /video>
 SetOutputFilter RATE_LIMIT
 SetEnv rate-limit 200
</Location>

上面配置的意思是在路径/video路径下的下载速度限制最大为200kb/s

重启之后,复制一个比较大的文件如test.zip放到htdocs/video目录下,然后使用浏览器下载http://localhost/video/test.zip,多下载几个,最后发现速度都是在200kb/s以内。

总结

apache的限速是限制每个连接的下载速度,在有限的带宽的情况下非常有用,避免部分连接把带宽都占满,可以与tc配置使用限制指定端口的带宽,可以达到不同的端口下载速度不一样。