给grep定义别名

2011年12月16日 没有评论

grep算是一个用的比较多的命令吧,很多时候grep都是配合其他命令一起使用,例如查看系统进程是否有某个进程,就可以用

ps aux | grep xxx

如果系统存在该进程,就会被显示出来,不过不管有没有xxx,都会打印出含有”grep xxx”一行,有时候不细心,以为存在xxx进程,要是不想看到这个行,可以这样

ps aux | grep xxx | grep -v grep

每次执行都这样可能会觉得有点麻烦,那也可以使用alias的方式,来个一劳永逸,把下面命令

alias grep=”grep -v grep | grep”

加到/etc/bashrc或用户更目录下的.bashrc文件中即可。

分类: Linux 标签: ,

centos下设置时区

2011年12月13日 没有评论

对于中国用户,如果centos默认使用UTC时区,那时间相差八个小时,其实可以通过简单的设置,变为中国时区,这时候机器上的时间和本地手表上的时间就是一致的。执行如下命令:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

就可以了,如果没有看到/Asia/Shanghai文件,手动执行以下 tzselect ,按照提示选择即可。

Tomcat-6.0.33之APR based Apache Tomcat Native library

2011年11月25日 没有评论

最近使用tomcat 6.0.33这个版本,启动的时候有个提示:

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:...

tomcat可以整合本地apr,在处理静态资源的时候速度更快,总而言之就是使用本地的apr库提升处理效率。在网上一查,很多人提到了这个问题,解决这个问题其实很简单,但window和linux处理方法不太一样。下面就分别给出解决方法。

  • window平台

在window下启动的时候会提示was not found on the java.library.path: C:\Tools\jdk1.6.0_29\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS …,这个根据每个人的环境不同,可能给出的路径也不太一样,只要把Native library拷贝到上述路径之一即可,Native library是什么呢,网上有提供下载,其实不要那么麻烦,在tomcat的bin目录下就有,文件名是:tcnative-1.dll。例如我把这个文件拷贝到C:\Tools\jdk1.6.0_29\bin下,然后再启动tomcat就没有上述的提示了。

  • linux平台

linux下比较复杂一点,因为tomcat包中没有提供编译好的so文件,所以需要自己编译,tomcat发行版中提供了源码,文件为tomcat的bin/tomcat-native.tar.gz,另外编译时候需要依赖APR 1.2、OpenSSL,如果机器上没有安装,可以使用 yum -y install apr-devel openssl-devel 来进行安装。解压tomcat-native.tar.gz后会得到一个tomcat-native-1.1.20-src的目录,Native library的源文件位于tomcat-native-1.1.20-src/jni/native下,进入该目录,执行./configure,可能会看到configure: error: APR could not be located. Please use the –with-apr option.的错误提示,这个时候用–with-apr制定一下apr的位置即可,我使用的是

./configure --with-apr=/usr/bin/apr-1-config

,顺利通过,然后执行 make && make install 编译就算搞定,此时应该可以在/usr/local/apr/lib/下看到一个名为 libtcnative-1.so 的文件,拷贝该文件到tomcat启动时提示的任何一个路径即可。

更多关于apr的信息可以查看官方资料,地址:http://tomcat.apache.org/tomcat-5.5-doc/apr.html

linux的uniq命令

2011年11月21日 没有评论

使用uniq命令可以过滤掉文本文件中重复的行以及统计等等功能,同时它也接受来着管道的输入。借助awk,甚至可以对行中的列进行操作,例如统计nginx日志信息中独立ip数、列出访问次数最多的ip等。需要注意的地方是uniq只对相连的行进行处理,所以一般情况下要先进行sort操作。

假设有名为test.txt文本文件,其信息为:

ab
ac
ab
ac
ac
ad
ac

执行命令

uniq test.txt

此时得到的结果为:

ab
ac
ab
ac
ad
ac

从结果可以看到,这里只对3,4行的ac进行过滤,这显然不是我们需要的结果,原因就是uniq只对相连的行进行运算了,现在先用sort排序,然后再执行uniq,例如:

sort test.txt | uniq

这时的结果为:

ab
ac
ad

可以看到再没有重复行了。

例如通过nginx日志统计独立ip的个数:

awk '{print $1}' /path-to-log-dir/access.log | sort | uniq | wc -l

查询访问最多的前10个ip

awk '{print $1}' /path-to-log-dir/access.log  | sort | uniq -c | sort -nr | head -10
分类: Linux 标签: ,

使用neuxs搭建maven私服

2011年11月18日 评论已被关闭

私服的好处很多,可以在私服上建立公司内部仓库,把公司的内部构件部署上去供其他人或项目使用;能够部署第三方构件,某些第三方构建在公共的仓库中没有,如果项目中需要使用,就可以把第三方构建部署到自己的私服上,这样mavne中就能正常使用了;在没有私服的情况,项目开发的每个人都需要从远程的中央库下载依赖的构建,浪费带宽不说,效率还低;等等……。

  • 安装nexus

1、下载

下载地址:http://nexus.sonatype.org/downloads/,这里列出了所有版本,挑一个最新版本来使用。Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。为了方便就直接选用bundle版本。本文下载的是nexus-oss-webapp-1.9.2.3-bundle.tar.gz 。

2、安装

在指定的目录解压下载的文件

tar xvf nexus-oss-webapp-1.9.2.3-bundle.tar.gz

解压后会看到两个文件夹,分别是nexus-oss-webapp-1.9.2.3和sonatype-work,前者包含了nexus的运行环境和应用程序,后者包含了你自己的配置和存储构件的地方。nexus-oss-webapp-1.9.2.3/conf/plexus.properties中可以修改端口信息已经工作区的路径。

3、启动nexus
进入nexus-oss-webapp-1.9.2.3/bin/jsw/目录,然后根据OS的版本进入相应的目录,在linux下,运行./nexus start即启动了服务,直接运行./nexus会看到提示信息。neuxs默认监听端口是8081,此时在浏览器中运行访问http://nexus-server-ip:8081/nexus应该可以看到neuxs的界面。

  • 配置nexus

新搭建的neuxs环境只是一个空的仓库,需要手动和远程中心库进行同步,nexus默认是关闭远程索引下载,最重要的一件事情就是开启远程索引下载。登陆nexus系统,默认用户名密码为admin/admin123。 点击左边Administration菜单下面的Repositories,找到右边仓库列表中的三个仓库Apache Snapshots,Codehaus Snapshots和Maven Central,然后再没有仓库的configuration下把Download Remote Indexes修改为true。然后在这三个仓库上分别右键,选择Repari Index,这样Nexus就会去下载远程的索引文件。

新建公司的内部仓库,步骤为Repositories –> Add –> Hosted Repository,在页面的下半部分输入框中填入Repository ID和Repository Name即可,比如分别填入myrepo和 my repository,另外把Deployment Policy设置为Allow Redeploy,点击save就创建完成了。

修改neuxs仓库组

Nexus中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。

neuxs-1.9.2.3中默认自带了一个名为“Public Repositories”组,点击该组可以对他保护的仓库进行调整,把刚才建立的公司内部仓库加入其中,这样就不需要再在maven中明确指定内部仓库的地址了。同时创建一个Group ID为public-snapshots、Group Name为Public Snapshots Repositories的组,把Apache Snapshots、Codehaus Snapshots和Snapshots加入其中。

到这里neuxs的安装配置就完成了,下面介绍如何在mavne中使用自己的私服。 阅读全文…

分类: Java, Linux 标签: ,

netstat命令的常见用法

2011年11月17日 没有评论
  • 查看系统服务监听状况
netstat -tunlp
  • 查看连接某服务端口最多的的IP地址
netstat -nat | grep "10.150.185.178:80" | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20
  • TCP各种状态列表
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn
或
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

另外分析access.log获得访问前10位的ip地址可以用如下命令:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
分类: Linux 标签: ,

the NTP socket is in use, exiting

2011年11月16日 没有评论

centos下使用如下命令手动同步服务器时间

	ntpdate ntp.fudan.edu.cn
	或
	ntpdate ntp.api.bz

出现“the NTP socket is in use, exiting”错误。造成该原因是系统ntpd服务器正在运行中,可以通过 ps aux | grep ntpd 查看,如果还是要手动同步时间,就必须先停止该服务,命令为:

	service ntpd stop

然后再通过 ntpdate ntp.fudan.edu.cn 即可手动同步时间了。另外注意,如果想把它加入到crontab中,最好把ntpdate命令的完整路径带上,即/usr/sbin/ntpdate ntp.fudan.edu.cn,否则可能在某些版本的linux中不会被执行,同时用chkconfig把ntpd修改成不是自动运行的状态。

分类: Linux 标签:

解决ssh空闲一段时间后自动断开的方法

2011年11月3日 没有评论

用客户端工具,例如securecrt连接linux服务器,有的会出现过一段时间没有任何操作,客户端与服务器就断开了连接。造成这个的原因,主要是因为客户端与服务器之间存在路由器,防火墙以及为了本身的安全性,在超过特定的时间后就会把空闲连接断开。或者是服务器端设置了断开空闲连接。那么解决的方法有两种,一是从服务器着手,一是在客户端工具上下手。

  • 服务器端

修改/etc/ssh/sshd_config配置文件 ClientAliveInterval 300(默认为0),参数的是意思是每5分钟,服务器向客户端发一个消息,用于保持连接,使用service sshd reload 让其修改后生效。如果发现还是有问题,可以试着把300设置小一点,例如60。

  • 客户端工具

securecrt的设置方法:会话选项 –> 终端 –> 反空闲–>选中发送协议 NO-OP(p) 每 60 秒

putty的设置方法:putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默认为0, 改为300

分类: Linux 标签: , ,

php-fpm进程管理方式

2011年11月1日 没有评论

目前最新5.3.x的php-fpm,有两种管理进程的方式,分别是static和dynamic。

如果设置成static,进程数自始至终都是pm.max_children指定的数量,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers配置将没有作用。

如果设置成dynamic,则进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,但不超过pm.max_children指定的数量,同时保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。

当php-fpm启动后,一个php-cgi进程约战3M内存,但是当它们处理过一些请求后,有些内存是释放不掉的,占用的内存能达到20M-30M不等。

对于内存比较吃紧,同时并发量不是很大的应用,可以考虑采用static的方式,这样可以很好的控制php-fpm的所消耗的总内存数,让系统更加平稳运行。另外由于并发量很小,可以适当的把设置pm.max_requests小一些,以便让php-fpm进程有机会重启,从而释放其占用的内存。

nginx+tomcat配置负载均衡

2011年10月31日 没有评论

使用nginx做为前端服务器,tomcat作为后端服务器,通过一些简单的配置就可以达到tomcat集群的目的。一般情况下,只需要在nginx的配置文件nginx.conf进行如下配置即可。

http {
    upstream  tomcat-host{
        server 192.168.1.201:8080 weight=3;
        server 192.168.1.202:8080;
        ip_hash;
    }  

    server {
        listen 80;
        server_name www.domain.com;  

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

其中upstream是配置后端服务器列表、load balance的权重,ip_hash能够把来自同一个客户端的多次请求指派到某个固定的后端服务器,能一定程度的解决session问题,如果完美的解决集群后session问题,可以采用memcached的方式来处理。在server段配置中,主要就是proxy_pass,prxoy_pass目标地址就是上述设置的upstream名字,注意,不能缺少“http://”,proxy_set_header处理客户端的IP信息,由于前端是nginx,在tomcat的java应用中用request.getRemoteAddr(),得到的ip信息不再是客户端的ip,而是nginx服务器的ip,解决办法是需要修改java应用,大致可以使用如下代码:

String ip = request.getHeader("x-forwarded-for");

if (ip == null || "".equals(ip.trim())) {
	ip = request.getRemoteAddr();
} else {
	String[] ars = ip.split(",");
	ip = ars[ars.length-1].trim();
}

无觅相关文章插件,快速提升流量