给grep定义别名
grep算是一个用的比较多的命令吧,很多时候grep都是配合其他命令一起使用,例如查看系统进程是否有某个进程,就可以用
如果系统存在该进程,就会被显示出来,不过不管有没有xxx,都会打印出含有”grep xxx”一行,有时候不细心,以为存在xxx进程,要是不想看到这个行,可以这样
每次执行都这样可能会觉得有点麻烦,那也可以使用alias的方式,来个一劳永逸,把下面命令
加到/etc/bashrc或用户更目录下的.bashrc文件中即可。
grep算是一个用的比较多的命令吧,很多时候grep都是配合其他命令一起使用,例如查看系统进程是否有某个进程,就可以用
如果系统存在该进程,就会被显示出来,不过不管有没有xxx,都会打印出含有”grep xxx”一行,有时候不细心,以为存在xxx进程,要是不想看到这个行,可以这样
每次执行都这样可能会觉得有点麻烦,那也可以使用alias的方式,来个一劳永逸,把下面命令
加到/etc/bashrc或用户更目录下的.bashrc文件中即可。
对于中国用户,如果centos默认使用UTC时区,那时间相差八个小时,其实可以通过简单的设置,变为中国时区,这时候机器上的时间和本地手表上的时间就是一致的。执行如下命令:
就可以了,如果没有看到/Asia/Shanghai文件,手动执行以下 tzselect ,按照提示选择即可。
最近使用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下启动的时候会提示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下比较复杂一点,因为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
使用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
私服的好处很多,可以在私服上建立公司内部仓库,把公司的内部构件部署上去供其他人或项目使用;能够部署第三方构件,某些第三方构建在公共的仓库中没有,如果项目中需要使用,就可以把第三方构建部署到自己的私服上,这样mavne中就能正常使用了;在没有私服的情况,项目开发的每个人都需要从远程的中央库下载依赖的构建,浪费带宽不说,效率还低;等等……。
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的界面。
新搭建的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中使用自己的私服。 阅读全文…
netstat -tunlp
netstat -nat | grep "10.150.185.178:80" | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -20
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
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修改成不是自动运行的状态。
用客户端工具,例如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
目前最新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作为后端服务器,通过一些简单的配置就可以达到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(); }