1. <mark id="ghavm"><button id="ghavm"></button></mark>

      <listing id="ghavm"><strong id="ghavm"></strong></listing>
      <code id="ghavm"></code><rt id="ghavm"><label id="ghavm"><legend id="ghavm"></legend></label></rt>
      1. <tt id="ghavm"><button id="ghavm"></button></tt>

        随笔-178  评论-666  文章-29  trackbacks-0
          置顶随笔
        我?#24184;?#20010;阿里云推荐码,分享给大家免费使用,购买云服务器ECS或云数据库RDS可享受原价优惠,拿走不谢。
        购买可以用阿里云主机推荐码

        点击领取优惠券:
        https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=dmb0rzcj&utm_source=dmb0rzcj

        马上可享受优惠,购买阿里云主机马上给你省钱!



        我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
        点击领取幸运券https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=dmb0rzcj&utm_source=dmb0rzcj


        posted @ 2015-10-28 14:25 Alpha 阅读(507) | 评论 (0)编辑 收藏
          2018年3月13日

        一、安装git服务器所需软件

        打开终端输入以下命令:

        ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
        git-core是git版本控制核心软件

        安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件

        然后中间有个确?#21916;?#20316;,输入Y后等待系统自动从镜像服务器中下载软件安装,安装完后会回到用户当前目录。如果

        安装提示失败,可能是因为系统软件库的索引文件太旧了,先更新一下就可以了,更新命令如下:

        ubuntu:~$ sudo apt-get update 

        更新完软件库索引后继续执行上面的安装命令即可。

        安装python的setuptools和gitosis,由于gitosis的安装需要依赖于python的一些工具,所以我们需要先安装python

        的setuptools。

        执行下面?#25343;?#20196;:

        ubuntu:~$ sudo apt-get install python-setuptools
        这个工具比较小,安装也比较快,接下来准备安装gitosis,安装gitosis之前需要初始化一下服务器的git用户信息,这个随便填。

        ubuntu:~$ git config --global user.name "myname"
        ubuntu:~$ git config --global user.email "******@gmail.com"

        初始化服务器用户信息后,就可以安装gitosis了,gitosis主要是用于给用户授权,设置权限也算是很方便的。

        可以通过以下命令获取gitosis版本文件

        ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
        注意:中间有两个是数字零

        获取gitosis文件后,进入到文件目录下面

        ubuntu:/tmp$ cd gitosis/

        接着使用python命令安装目录下的setup.py的python脚本进行安装

        ubuntu:/tmp/gitosis$ sudo python setup.py install

        到这里,整个安?#23433;?#39588;就完成了,下面就开?#32423;詆it进?#24184;?#20123;基本的配置。

        二、创建git管理员账户、配置git

        创建一个账户(git)作为git服务器的管理员,可以管理其他用户的项目权限。

        ubuntu:/tmp/gitosis$ sudo useradd -m git
        ubuntu:/tmp/gitosis$ sudo passwd git

        然后再/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户没有任何权限。

        ubuntu:/tmp/gitosis$ sudo mkdir /home/gitrepository
        ubuntu:/tmp/gitosis$ sudo chown git:git /home/gitrepository/
        ubuntu:/tmp/gitosis$ sudo chmod 700 /home/gitrepository/

        由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接?#25104;洹?#35753;他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。

        ubuntu:/tmp/gitosis$ sudo ln -s /home/gitrepository /home/git/repositories

        这里我将在服务器端生成ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个ssh的公钥。

        ubuntu:/home/git$ ssh-keygen -t rsa

        这里会提示输入密码,我们不输入直接回车即可。

        然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。

        向gitosis添加公钥并初始化:

        $ cp ~/.ssh/id_rsa.pub /tmp

        $ sudo -H -u gitadmin gitosis-init < /tmp/id_rsa.pub

        Ubuntu完美搭建Git服务器

        出现如上信息说明gitosis已经初始化成功。

        gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要?#20113;?#20013;的一个post-update文件添加可执行的权限。

        ubuntu:/home/git$ sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

        三、服务器上创建项目仓库

        使用git账户在服务器上创建一个目录(mytestproject.git)并初始化成git项目仓库。

        ubuntu:/home/git$ su git
        $ cd /home/gitrepository
        $ mkdir mytestproject.git
        $ git init --bare mytestproject.git
        $ exit

        如果出现以下信息就说明已经成功创建了一个名为mytestproject.git的项目仓库了,新建的这个仓库暂时还是空的,不能被客户端clone,还需要对gitosis进?#24184;?#20123;配置操作。

        四、使用gitosis管理用户操作项目的权限

        首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。

        在客户端机器上新建一个目录用于存放gitosis-admin.git仓库

        ubuntu:~$ mkdir gitadmin
        ubuntu:~$ cd gitadmin/
        ubuntu:~/gitadmin$ git clone git@192.168.1.106:gitosis-admin.git

        clone正确会显示以下信息

        Ubuntu完美搭建Git服务器

        clone下来会?#24184;?#20010;gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用于认证请求的客户端机器。

        现在让需要授权的用户使用前面的方式各自在其自己的机器上生?#19978;?#24212;的ssh公钥文件,管理员把他们分别按用户名命名好,复制到keydir目录下。

        ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/

        ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/

        继续编辑gitosis.conf文件

        [gitosis]

        [group gitosis-admin] 
        ####管理员组
        members = charn@ubuntu 
        ####管理员用户名,需要在keydir目录下找到相应的.pub文件,多个可用空格隔开(下同)
        writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)

        [group testwrite] 
        ####可写权限组
        members = zhangsan####组用户
        writable = mytestproject####可写的项目仓库名

        [group
         testread] ####只读权限组
        members =lisi####组用户
        readonly= mytestproject####只读项目仓库名

        因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。

        ubuntu:~/gitadmin/gitosis-admin$ git add .
        ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"
        ubuntu:~/gitadmin/gitosis-admin$ git push origin master

        推?#32479;?#21151;会显示下面提示信息

        Ubuntu完美搭建Git服务器

        又是后新增的用户不能立即生效,这时候需要重新启动一下sshd服务

        ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart

        现在,服务端的git就已经安装和配置完成了,接下来就需要有权限的组成员在各自的机器上clone服务器?#31995;?#30456;应

        项目仓库进行相应的工作了。

        五、客户端(windows)使用git

        下载安装windows版本的git客户端软件,下载地址:http://msysgit.github.io/

        安装完成后右键?#35828;?#20250;出现几个git相关的?#35828;?#36873;项,我们主要使用其中的git
         bash通过命令行来进行操作。

        在本地新建一个目录,使用git初始化这个目录,然后再里面新建一个文本文件用于测试,最后关联到git服务器仓库

        中的相关项目,最后上传本地版本到服务器。

        $ mkdir testgit
        $ cd testgit
        $ git init
        $ echo "this is a test text file,will push to server" > hello.txt
        $ git add .
        $ git commit -am "init a base version,add a first file for push to server"
        $ git remote add origin git@serverip:mytestproject.git
        $ git push origin master

        这样服务端就创建好了一个mytestproject.git的仓库的基础版本了,现在其他组员只要从服务端进行clone就可以了。

        window下面进入到需要克隆的本地目录下面右键选择git bash选项,输入

        $ git clone git@serverip:mytestproject.git

        就可以把项目clone到本地仓库了。

        下面进行简单的修改和提交操作

        $ cd mytestproject
        $ echo "this is another text file created by other" >another.txt
        $ git add .
        $ git commit -am "add a another file by other"
        $ git push origin master

        最后推送到服务器成功会显示如下信息

        Ubuntu完美搭建Git服务器


        gitolite搭建git仓库(服务端+客户端)

        http://blog.csdn.net/ChiChengIT/article/details/49863383

        posted @ 2018-03-13 15:35 Alpha 阅读(179) | 评论 (0)编辑 收藏
          2018年3月8日
             摘要: Git 教程http://www.runoob.com/git/git-tutorial.htmlGit本地服务器搭建及使用Git是一款免费、开源的分布式版本控制系统。众所周知的Github便是基于Git的开?#21019;?#30721;库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个较好的选择,本文将对此进行详细?#27493;狻#?#25512;荐一家提供私有?#21019;?#30721;免费托管的网站:Bitbucket,目前支持...  阅读全文
        posted @ 2018-03-08 10:44 Alpha 阅读(1364) | 评论 (0)编辑 收藏
          2017年12月25日
        1.查看内存  free
        2.查看cpu  cat cpuinfo
        3.查?#21019;?#30424;  fdisk -l
        4.查?#21019;?#23485;  iptraf-ng
        5.查看负载  top
        6.查看请求数  netstat  -anp | wc -l
        7.查看请求详情  netstat  -anp
        8.查看某个程序请求数  netstat -anp | grep php |wc -l
        9.查?#21019;?#30424;使用情况  df -h
        10.查看系统日志  dmesg
        11.查看进程数量  ps aux | wc -l
        12.查看运行网络程序 ps auxww | more
        13.
        查看php运行程序 ps auxww | grep php
        14.查看php运行程序数量 ps auxww | grep php | wc -l
        15.查看init.d运行  
        ls -al /etc/init.d/
        16.查找文件路径   find / -name php.ini
        17.查看mysql端口   netstat -anp | grep 3306
        18.查看本机ip地址  ip add
        19.查找某个字符串在文件中出现的  grep 127.0.0.1:9000  *.conf
        20.

        posted @ 2017-12-25 10:16 Alpha 阅读(336) | 评论 (0)编辑 收藏
          2017年12月23日

        一、背景

        系统管理员,最谨慎的linux就是rm命令了,一不小心数据就没干掉,最恐怖的是数据没有备份,没法还原了,此类事情发生的太多了,针对于此,我们经过多次尝试演练,终于成功的把大部分删除的数据?#19968;?#26469;了,下面我把演练过程给大家介绍一下。

        二、安装?#25351;?#36719;件

        extundelete,该工具官方给出的是可以?#25351;磂xt3或者ext4文件系统被删除的文件。

        1?#21644;?#36807;命令安装

        #yum install extundelete -y

        2?#21644;?#36807;源码编译安装

        #yum -y install e2fsprogs-devel e2fsprogs  #wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 #tar -xvjf extundelete-0.2.4.tar.bz2 #cd extundelete-0.2.4 #./configure #make &&make install

        三、删除数据查找

        首先,我们先删除一个文件,如图:

        Linux怎样?#25351;?#35823;删除的数据

        如上图,我们刚才在/boot目录下删除了个symvers-2.6.32-431.el6.x86_64.gz文件,/boot是落到/dev/sda1下

        在Linux下可以通过“ls -id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:

        [root@cloud boot]# ls -id /boot 2 /boot

        注:根目录的inode一般为2

        然后我们开始查找被删除的文件,需要根据分区inode查找,命令如下:

        #extundelete /dev/sda1 --inode 2

        结果如下图:

        Linux怎样?#25351;?#35823;删除的数据

        我们就可以看到标识为Deleted的被删除数据了。

        四、数据?#25351;?/strong>

        我们就开始?#25351;矗?#21629;令如下:

        #extundelete /dev/sda1 --restore-file symvers-2.6.32-431.el6.x86_64.gz

        如图:

        Linux怎样?#25351;?#35823;删除的数据

        Linux怎样?#25351;?#35823;删除的数据

        还原成功

        当然,还有可能删除整个文件夹,我们也举个例子,如下:

        #extundelete /dev/sda1 --restore-directory test

        ?#25351;?#20840;?#21487;?#38500;数据,如下:

        #extundelete /dev/sdb1 --restore-all

        也可以通过时间段?#25351;矗?#36825;里就不说了,参数如下:

        --version, -[vV],显示软件版本号。 --help,显示软件帮助信息。 --superblock,显示超级块信息。 --journal,显示日志信息。 --after dtime,时间参数,表示在某段时间之后被删的文件或目录。 --before dtime,时间参数,表示在某段时间之前被删的文件或目录。 动作(action)有: --inode ino,显示节点“ino”的信息。 --block blk,显示数据块“blk”的信息。 --restore-inode ino[,ino,...],?#25351;?#21629;令参数,表示?#25351;?#33410;点“ino”的文件,?#25351;?#30340;文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。 --restore-file 'path',?#25351;?#21629;令参数,表示将?#25351;?#25351;定路径的文件,并把?#25351;?#30340;文件放在当前目录下的RECOVERED_FILES目录中。 --restore-files 'path',?#25351;?#21629;令参数,表示将?#25351;?#22312;路径?#24184;?#21015;出的所有文件。 --restore-all,?#25351;?#21629;令参数,表示将尝试?#25351;?#25152;有目录和文件。 -j journal,表示从已经命名的文件中读取扩展日志。 -b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。 -B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。

        五、总结

        数据?#25351;矗?#19981;一定能全部将数据?#25351;?#22238;来,还是一句话,操作要谨慎。万一操作失误,也不要慌,将损失减少到最小,首先停止所有操作,其次让专?#31561;嗽比?#22788;理。

        阿里云服务器优惠券

        posted @ 2017-12-23 16:11 Alpha 阅读(500) | 评论 (0)编辑 收藏
          2016年8月10日
        阿里云服务器优惠券
        1. 安裝 nginx 
          CentOS 7 沒有內建的 nginx,所以先到 nginx 官網  http://nginx.org/en/linux_packages.html#stable ,找到 CentOS 7 的 nginx-release package 檔案連結,?#20250;?#22914;下安裝
          rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
          安裝後,會自動產生 yum 的 repository 設定(在 /etc/yum.repos.d/nginx.repo), 
          接下來便可以使用 yum 指令安裝 nginx
          yum install nginx
        2. 啟動 nginx 
          以前用 chkconfig 管理服務,CentOS 7 改用 systemctl 管理系統服務 
          立即啟動
          systemctl start nginx
          查看目前運作狀態
          systemctl status nginx
          查看 nginx 服務目前的啟動設定
          systemctl list-unit-files | grep nginx
          若是 disabled,可以改成開機自動啟動
          systemctl enable nginx
          若有設定防火牆,查看防火牆運行狀態,看是否有開啟 nginx 使用的 port
          firewall-cmd --state
          永久開放開啟防火牆的 http 服務
          firewall-cmd --permanent --zone=public --add-service=http
          firewall-cmd --reload
          列出防火牆 public 的設定
          firewall-cmd --list-all --zone=public
          經過以上設定,應該就可以使用瀏覽器訪問 nginx 的預設頁面。
        3. 安裝 PHP-FPM 
          使用 yum 安裝 php、php-fpm、php-mysql
          yum install php php-fpm php-mysql
          查看 php-fpm 服務目前的啟動設定 
          systemctl list-unit-files | grep php-fpm
          改成開機自動啟動
          systemctl enable php-fpm
          立即啟動
          systemctl start php-fpm
          查看目前運作狀態
          systemctl status php-fpm
        4. 修改 PHP-FPM listen 的方式 
          若想將 PHP-FPM listen 的方式,改成 unix socket,可以編輯 /etc/php-fpm.d/www.conf 
          listen = 127.0.0.1:9000
          改成
          listen = /var/run/php-fpm/php-fpm.sock
          ?#20250;?#37325;新啟動 php-fpm
          systemctl restart php-fpm
          註:不要改成 listen = /tmp/php-fcgi.sock (將 php-fcgi.sock 設定在 /tmp 底下), 因為系統產生 php-fcgi.sock 時,會放在 /tmp/systemd-private-*/tmp/php-fpm.sock 隨機私有目錄下, 除非把 /usr/lib/systemd/system/ 裡面的 PrivateTmp=true 設定改成 PrivateTmp=false, 但還是會產生其他問題,所以還是換個位置最方便 


          删除之前的版本

          # yum remove php*

          rpm 安装 Php7 相应的 yum源

          CentOS/RHEL 7.x:

          # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

          CentOS/RHEL 6.x:
          # rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

          yum安装php7

          yum install php70w php70w-opcache
          安装其他插件(选装)
          注:如果安装pear,需要安装php70w-devel
          php70w
          php70w-bcmath
          php70w-cli
          php70w-common
          php70w-dba
          php70w-devel
          php70w-embedded
          php70w-enchant
          php70w-fpm
          php70w-gd
          php70w-imap
          php70w-interbase
          php70w-intl
          php70w-ldap
          php70w-mbstring
          php70w-mcrypt
          php70w-mysql
          php70w-mysqlnd
          php70w-odbc
          php70w-opcache
          php70w-pdo
          php70w-pdo_dblib
          php70w-pear
          php70w-pecl-apcu
          php70w-pecl-imagick
          php70w-pecl-xdebug
          php70w-pgsql
          php70w-phpdbg
          php70w-process
          php70w-pspell
          php70w-recode
          php70w-snmp
          php70w-soap
          php70w-tidy
          php70w-xml
          php70w-xmlrp

          编译安装php7

          配置(configure)、编译(make)、安装(make install)

          使用configure --help

          编译安装一定要指定定prefix,这是安装目录,会把所有文件限制在这个目录,卸载时只需要删除那个目录就可以,如果不指定会安装到很多地方,后边删除不方便。

          Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print `checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX

          注意
          内存小于1G安装往往会出错,在编译参数后面加上一?#24515;?#23481;--disable-fileinfo

          其他配置参数

          --exec-prefix=EXEC-PREFIX
          可以把体系相关的文件安装到一个不同的位置,而不是PREFIX设置的地方.这样做可以比较方便地在不同主机之间共享体系相关的文件
          --bindir=DIRECTORY
          为可执行程序声明目录,?#31508;?#26159; EXEC-PREFIX/bin
          --datadir=DIRECTORY
          设置所安装的程序需要的只读文件的目录.?#31508;?#26159; PREFIX/share
          --sysconfdir=DIRECTORY
          用于各?#25351;?#26679;配置文件的目录,?#31508;?#20026; PREFIX/etc
          --libdir=DIRECTORY
          库文件和动态装载模块的目录.?#31508;?#26159; EXEC-PREFIX/lib
          --includedir=DIRECTORY
          C 和 C++ 头文件的目录.?#31508;?#26159; PREFIX/include
          --docdir=DIRECTORY
          文档文件,(除 “man(手册页)”以外, 将被安装到这个目录.?#31508;?#26159; PREFIX/doc
          --mandir=DIRECTORY
          随着程序一起带的手册页 将安装到这个目录.在它们相应的manx子目录里. ?#31508;?#26159;PREFIX/man
          注意: 为了减少对共享安装位置(比如 /usr/local/include) 的污染,configure 自动在 datadir, sysconfdir,includedir, 和 docdir 上附加一个 “/postgresql” ?#25191;?除非完全展开以后的目录名字已经包含?#25191;?“postgres” 或者 “pgsql”.比如,如果你选择 /usr/local 做前缀,那么 C 的头文件将安装到 /usr/local/include/postgresql, 但是如果前缀是 /opt/postgres,那?#27492;?#20204;将 被放进 /opt/postgres/include
          --with-includes=DIRECTORIES
          DIRECTORIES 是一系列冒号分隔的目录,这些目录将被加入编译器的头文件 搜索列表中.如果你?#24184;?#20123;可选的包(比如 GNU Readline)安装在 非标准位置,你就必须使用这个选项,以及可能还有相应的 --with-libraries 选项.
          --with-libraries=DIRECTORIES
          DIRECTORIES 是一系列冒号分隔的目录,这些目录是用于查找库文件的. 如果你?#24184;?#20123;包安装在非标准位置,你可能就需要使用这个选项 (以及对应的--with-includes选项)
          --enable-XXX
          打开XXX支持
          --with-XXX
          制作XXX模块

          • PHP FPM設定參考
            [global]
                     pid = /usr/local/php/var/run/php-fpm.pid
                     error_log = /usr/local/php/var/log/php-fpm.log
                     [www]
                     listen = /var/run/php-fpm/php-fpm.sock
                     user = www
                     group = www
                     pm = dynamic
                     pm.max_children = 800
                     pm.start_servers = 200
                     pm.min_spare_servers = 100
                     pm.max_spare_servers = 800
                     pm.max_requests = 4000
                     rlimit_files = 51200
                     listen.backlog = 65536
                     ;設 65536 的原因是-1 可能不是unlimited
                     ;說明 http://php.net/manual/en/install.fpm.configuration.php#104172
                     slowlog = /usr/local/php/var/log/slow.log
                     request_slowlog_timeout = 10
          • nginx.conf 設定參考 
            user nginx;
                     worker_processes 8;
                     error_log /var/log/nginx/error.log warn;
                     pid /var/run/nginx.pid;
                     events {
                      use epoll;
                      worker_connections 65535;
                     }
                     worker_rlimit_nofile 65535;
                     #若沒設定,可能出現錯誤:65535 worker_connections exceed open file resource limit: 1024
                     http {
                      include /etc/nginx/mime.types;
                      default_type application/octet-stream;
                      log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                           '$status $body_bytes_sent "$http_referer" '
                           '"$http_user_agent" "$http_x_forwarded_for"';
                      access_log /var/log/nginx/access.log main;
                      sendfile on;
                      tcp_nopush on;
                      keepalive_timeout 65;
                      server_names_hash_bucket_size 128;
                      client_header_buffer_size 32k;
                      large_client_header_buffers 4 32k;
                      client_max_body_size 8m;
                      server_tokens off;
                      client_body_buffer_size 512k;
                      # fastcgi
                      fastcgi_connect_timeout 300;
                      fastcgi_send_timeout 300;
                      fastcgi_read_timeout 300;
                      fastcgi_buffer_size 64k;
                      fastcgi_buffers 4 64k;
                      fastcgi_busy_buffers_size 128k;
                      fastcgi_temp_file_write_size 128k;
                      fastcgi_intercept_errors on;
                      #gzip (說明 http://nginx.org/en/docs/http/ngx_http_gzip_module.html)
                      gzip off;
                      gzip_min_length 1k;#1k以上才壓縮
                      gzip_buffers 32 4k;
                       #http://stackoverflow.com/questions/4888067/how-to-get-linux-kernel-page-size-programatically
                       #使用 getconf PAGESIZE 取得系統 one memory page size,
                      gzip_http_version 1.0;
                      gzip_comp_level 2;
                      gzip_types text/css text/xml application/javascript application/atom+xml application/rss+xml text/plain application/json;
                       #查看 nginx 的 mime.types 檔案(/etc/nginx/mime.types),裡面有各種類型的定義
                      gzip_vary on;
                      include /etc/nginx/conf.d/*.conf;
                     }
                     
            若出現出現錯誤:setrlimit(RLIMIT_NOFILE, 65535) failed (1: Operation not permitted) 
            先查看目前系統的設定值
            ulimit -n
            若設定值太小,修改 /etc/security/limits.conf
            vi /etc/security/limits.conf
            加上或修改以下兩行設定
            * soft nofile 65535
                     * hard nofile 65535



        阿里云服务器优惠券
        posted @ 2016-08-10 13:44 Alpha 阅读(4775) | 评论 (0)编辑 收藏
          2016年4月29日
        阿里云服务器优惠券

        1.关于Tomcat的session数目 
        这个可以直接从Tomcat的web管理界面去查看即可 
        或者借助于第三方工具Lambda Probe来查看,它相对于Tomcat自带的管理稍微多了点功能,但也不多 

        2.监视Tomcat的内存使用情况 
        使用JDK自带的jconsole可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等 
        JDK自带的jvisualvm可以下载插件(如GC等),可以查看更丰富的信息。如果是分析本地的Tomcat的话,还可以进?#24515;?#23384;抽样等,检查每个类的使用情况 

        3.打印类的加载情况及对象的回收情况 
        这个可以通过配置JVM的启动参数,打印这些信息(到屏幕(默认?#19981;?#21040;catalina.log中)或者文件),具体参数如下: 
        -XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs] 
        -XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs] 
        -XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用,输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs] 
        -XX:+PrintGCApplicationConcurrentTime:打印?#30475;?#22403;圾回收前,程序未中?#31995;?#25191;行时间。可与上面混合使用。输出形式:Application time: 0.5291524 seconds 
        -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用。输出形式:Total time for which application threads were stopped: 0.0468229 seconds 
        -XX:PrintHeapAtGC: 打印GC前后的详细堆栈信息 
        -Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析 

        -verbose:class 监视加载的类的情况 
        -verbose:gc 在虚拟机发生内存回收时在输出设备显示信息 
        -verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息 

        4.添加JMS远程监控 
        对于部署在局域网内其它机器?#31995;腡omcat,可以打开JMX监控端口,局域网其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不支持),同样是在JVM启动参数中配置即可,配置如下: 
        -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false 
        -Djava.rmi.server.hostname=192.168.71.38 设置JVM的JMS监控监听的IP地址,主要是为了防止错误的监听成127.0.0.1这个内网地址 
        -Dcom.sun.management.jmxremote.port=1090 设置JVM的JMS监控的端口 
        -Dcom.sun.management.jmxremote.ssl=false 设置JVM的JMS监控不实用SSL 
        -Dcom.sun.management.jmxremote.authenticate=false 设置JVM的JMS监控不需要认证 


        5.专业点的分析工具有 
        IBM ISA,JProfiler等,具体监控及分析方式去网上搜索即可。 

         

         

        集群方案

        单个Tomcat的处理?#38405;?#26159;有限的,当并发量较大的时候,就需要有部署多套来进行负载均衡了。 

        集群的关键点?#24184;?#19979;几点: 
        1.引入负载端 
        软负载可以使用nginx或者apache来进行,主要是使用一个分发的功能 
        参考: 
        http://ajita.iteye.com/blog/1715312(nginx负载) 
        http://ajita.iteye.com/blog/1717121(apache负载) 

        2.共享session处理 
        目前的处理方式有如下几种: 
        1).使用Tomcat本身的Session复制功能 
        参考http://ajita.iteye.com/blog/1715312(Session复制的配置) 
        方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率 
        2).使用第三方来存放共享Session 
        目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行Tomcat的Session管理 
        参考http://ajita.iteye.com/blog/1716320(使用MSM管理Tomcat集群session) 
        3).使用黏性session的策略 
        对于会话要求不太强(不涉及到计费,失败了允许重新请求下等)的场合,同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理,这就是所谓的session sticky策略,目前应用也比较多 
        参考:http://ajita.iteye.com/blog/1848665(tomcat session sticky) 
        nginx默认不包含session sticky模块,需要重新编译才行(windows下我也不知道怎么重新编译) 
        优点是处理效率高多了,缺点是强会话要求的场合不合适 

        3.小结 
        以上是实现集群的要点,其中1和2可以组合使用,具体场景具体分析吧~

         

        JVM优化

        Tomcat本身还是运行在JVM?#31995;模?#36890;过对JVM参数的调整我们可以使Tomcat拥有更好的?#38405;堋?#38024;对JVM的优化目前主要在两个方面: 

        1.内存调优 
        内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。 

        具体设置如下: 
        JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4" 

        其各项参数如下: 
        -Xmx3550m:设置JVM最大可用内存为3550M。 
        -Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免?#30475;?#22403;圾回收完成后JVM重新分配内存。 
        -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统?#38405;?#24433;响较大,Sun官方推荐配置为整个堆的3/8。 
        -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个?#30340;?#29983;成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 

        -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 
        -XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6 
        -XX:MaxPermSize=16m:设置持久代大小为16m。 
        -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效?#30465;?#22914;果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。 


        2.垃圾回收策略调优 
        垃圾回收的设置也是在catalina.sh中,调整JAVA_OPTS变量。 
        具体设置如下: 
        JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100" 
        具体的垃圾回收策略及相应策略的各项参数如下: 

        串行收集器(JDK1.5以前主要的回收方式) 
        -XX:+UseSerialGC:设置串行收集器 

        并行收集器(吞吐量优先) 
        示例: 
        java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100 

        -XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅?#38405;?#36731;代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。 
        -XX:ParallelGCThreads=20:配置并行收集器的线程数,即?#21644;?#26102;多少个线程一起进行垃圾回收。此值最好配置与处理器数目相?#21462;?nbsp;
        -XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持?#38405;?#32769;代并行收集 
        -XX:MaxGCPauseMillis=100:设置?#30475;文?#36731;代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。 
        -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。 

        并发收集器(响应时间优先) 
        示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC 
        -XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。 
        -XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同?#31508;?#29992;。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。 
        -XX:CMSFullGCsBeforeCompaction:由于并发收集器不?#38405;?#23384;空间进行压缩、整理,所以运?#24184;?#27573;时间以后会产生“碎片”,使得运行效?#24335;档汀?#27492;值设置运行多少次GC以后?#38405;?#23384;空间进行压缩、整理。 
        -XX:+UseCMSCompactAtFullCollection:打开?#38405;?#32769;代的压缩。可能会影响?#38405;埽?#20294;是可以消除碎片 

        3.小结 
        在内存设置中需要做一下权衡 
        1)内存越大,一般情况下处理的效率也越高,但同时在做垃圾回收的时候所需要的时间也就越长,在这段时间内的处理效率是必然要受影响的。 
        2)在大多数的网络文章中都推荐 Xmx和Xms设置为一致,说是避免频繁的回收,这个在测试的时候没有看到明显的效果,内存的占用情况基本都是锯齿状的效果,所以这个还要根据实?#26159;?#20917;来定。

         

        Server.xml的Connection优化

        Tomcat的Connector是Tomcat接收HTTP请求的关键模块,我们可以配置它来指定IO模式,以?#25353;?#29702;通过这个Connector接受到的请求的处理线程数以及其它一些常用的HTTP策略。其主要配置参数如下: 

        1.指定使用NIO模型来接受HTTP请求 
        protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型来接受HTTP请求。默认是BlockingIO,配置为protocol="HTTP/1.1" 
        acceptorThreadCount="2" 使用NIO模型时接收线程的数目 

        2.指定使用线程池来处理HTTP请求 
        首先要配置一个线程池来处理请求(与Connector是平级的,多个Connector可以使用同一个线程池来处理请求) 
        <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
        maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/> 
        <Connector port="8080"
        executor="tomcatThreadPool" 指定使用的线程池 

        3.指定BlockingIO模式下的处理线程数目 
        maxThreads="150"http://Tomcat使用线程来处理接收?#25343;?#20010;请求。这个?#24403;?#31034;Tomcat可创建的最大的线程数。默认值200。可以根据机器的时期?#38405;?#21644;内存大小调整,一般可以在400-500。最大可以在800左右。 
        minSpareThreads="25"---Tomcat初始化时创建的线程数。默认值4。如果当前没有空闲线程,且没有超过maxThreads,一次性创建的空闲线程数量。Tomcat初始化时创建的线程数量也由此值设置。 
        maxSpareThreads="75"--一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。一旦创建的线程超过此数值,Tomcat会关闭不再需要的线程。线程数可以大致上用 “同时在线人数*每秒用户操作次数*系统平均操作时间” 来计算。 
        acceptCount="100"----指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。如果当前可用线程数为0,则将请求放入处理队列中。这个值限定了请求队列的大小,超过这个数值的请求将不予处理。 
        connectionTimeout="20000" --网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置?#24184;?#24739;的。通常可设置为30000毫秒。 

        4.其它常用设置 
        maxHttpHeaderSize="8192" http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。 
        URIEncoding="UTF-8" 指定Tomcat容器的URL编码格式。 
        disableUploadTimeout="true" 上传?#31508;?#21542;使用超时机制 
        enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为false 
        compression="on"   打开压缩功能 
        compressionMinSize="10240" 启用压缩的输出内容大小,默认为2KB 
        noCompressionUserAgents="gozilla, traviata"   对于以下的浏览器,不启用压缩 
        compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些?#35797;?#31867;型需要压缩 

        5.小结 
        关于Tomcat的Nio和ThreadPool,本身的引入就提高了处理的复?#26377;裕?#25152;以对于效率的提高有多少,需要实际验证一下。 

        6.配置示例 
        <Connector port="8080" 
        redirectPort="8443"
        maxThreads="150" 
        minSpareThreads="25" 
        maxSpareThreads="75" 
        acceptCount="100" 
        connectionTimeout="20000" 
        protocol="HTTP/1.1" 

        maxHttpHeaderSize="8192" 
        URIEncoding="UTF-8" 
        disableUploadTimeout="true" 
        enableLookups="false" 
        compression="on" 
        compressionMinSize="10240" 
        noCompressionUserAgents="gozilla, traviata" 
        compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"> 
        ... 
        </Connector>

         

         

        管理AJP端口

        AJP是为 Tomcat 与 HTTP 服务器之间通?#21734;?#23450;制的协议,能提供较高的通信速度和效?#30465;?#22914;果tomcat前端放的是apache的时候,会使用到AJP这个连接器。由于我们公司前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。

        <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
        



        默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署。

        修改实例:

         <Host name="localhost" appBase="" unpackWARs="false" autoDeploy="false">

        阿里云服务器优惠券
        posted @ 2016-04-29 11:59 Alpha 阅读(1938) | 评论 (2)编辑 收藏
          2016年4月7日
             摘要: 最新的版本可以在这里获取,目前下载的最新版本是5.08,更新于2016-02-03。在这里可以找到更多的说明。   下载好后,server端分为两个部分,一个是tracker,一个是storage。顾名?#23478;澹?#21069;者调度管理,负载均衡,后者则是实际的存储节点。两个都能做成集群,以防止单点?#25910;稀?#20197;前的4.x版本依赖libevent,现在不需要了,只需要libfastcommon。安装方法如下: 1....  阅读全文
        posted @ 2016-04-07 13:58 Alpha 阅读(2290) | 评论 (2)编辑 收藏
          2016年3月7日
             摘要: 1.第一步需要安装PPTP,以用来提供VPN服务. ? 1 sudo apt-get install pptpd ...  阅读全文
        posted @ 2016-03-07 12:30 Alpha 阅读(383) | 评论 (0)编辑 收藏
          2016年2月25日
        1.# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm 
        2. yum install pptpd 

        3.配置pptp.首先我们要编辑/etc/pptpd.conf文件:

        #vim /etc/pptpd.conf

        找到”locapip”和”remoteip”这两个配置项,将前面的”;”注释符去掉,更改为你期望的IP段值.localip表示服务器的IP,remoteip表示分配给客户端的IP地址,可以设置为区间.这里我们使用pptp默?#31995;?#37197;置:

        localip 192.168.0.1

        remoteip 192.168.0.234-238,192.168.0.245

        注意,这里的IP段设置,将直接影响后面的iptables规则添?#29992;?#20196;.请注意匹配的正确性,如果你嫌麻烦,建议就用本文的配置,就可以一?#22791;?#21046;命令和文本使用了.

        4.接下来我们再编辑/etc/ppp/options.pptpd文件,为VPN添加Google DNS:

        #vim /etc/ppp/options.pptpd

        在末尾添加下面两行:

        ms-dns 8.8.8.8

        ms-dns 8.8.4.4

        5、设置pptp VPN账号密码.我们需要编辑/etc/ppp/chap-secrets这个文件:

        #vim /etc/ppp/chap-secrets

        在这个文件里面,按照”用户名 pptpd 密码 *”的形式编写,一?#24184;?#20010;账号和密码.比如添加用户名为test,密码为1234的用户,则编辑如下内容:

        test pptpd 1234 *

        6、修改内核设置,使其支持转发.编辑/etc/sysctl.conf文件:

        #vim /etc/sysctl.conf

        将”net.ipv4.ip_forward”改为1,变?#19978;?#38754;的形式.

        net.ipv4.ip_forward=1

        保存退出,并执行下面?#25343;?#20196;来生效它:

        #sysctl -p

        7、添加iptables转发规则.经过前面的6个步骤,我们的VPN已经可以拨号了,但是还不能访问任何网页.最后一步就是添加iptables转发规则了,输入下面的指令:

        #iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

        需要注意的是,这个指令中的”192.168.0.0/24″是根据之前的配置文件中的”localip”网段来改变的,比如你设置的”10.0.0.1″网段,则应该改为”10.0.0.0/24″.?#36865;?#36824;?#24184;?#28857;需要注意的是eth0,如果你的外网网卡不是eth0,而是eth1(比如SoftLayer的服务器就是这样的情况),那么请记得将eth0也更改为对应的网卡编号,不然是上不了网的.

        然后我们输入下面的指令让iptables保存我们刚才的转发规则,以便重启系统后不需要再次添加:

        #/etc/init.d/iptables save

        然后我们重启iptables:

        #/etc/init.d/iptables restart

        8、重启pptp服务.输入下面的指令重启pptp:

        #/etc/init.d/pptpd restart

        现在你已经可以连接自己的VPN并浏览网页了.不过我们还需要做最后的一步.

        9、设置开机自动运行服务.我们最后一步是将pptp和iptables设置为开机自动运行,这样就不需要?#30475;?#37325;启服务器后手动启动服务了,当然你不需要自动启动服务的话可以忽略这一步,输入指令:

        #chkconfig pptpd on

        #chkconfig iptables on

        这样就大功告成了,赶快到Windows下建立一个VPN连接,IP填写自己的服务器IP,用户名和密码填写自己设置好的用户名和密码,点击”连接”,成功后就可以使用服务器去浏览网页啦.


        备注:

        多ip服务器转发指定规则

        iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j SNAT --to-source 192.168.8.1

        or

        iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j SNAT --to-source 服务器外网ip

        如果iphone之类的设?#25913;?#36830;上,访问网页或者youtube特别慢,需要做如下修改:

        vi /etc/ppp/ip-up

        增加一行

        /sbin/ifconfig $1 mtu 1400

        或者修改iptables规则

        iptables -A FORWARD -p tcp --syn -s 192.168.8.0/24 -j TCPMSS --set-mss 1356

        1356的值可能需要自己调整,调节到能保证网络正常使用情况下的最大值




        posted @ 2016-02-25 22:31 Alpha 阅读(342) | 评论 (0)编辑 收藏
          2015年10月31日
             摘要: 关于IP Tables在初始化设置系统后,为了让系统更安全,Ubuntu把Iptabls作为发行版的默认防火墙。起初,尽管Ubuntu防火墙已经被配置了,但是它设置为通过一个虚拟主机允许所有的进入与流出流量。要打开服务器上某些更强的保护功能,我们需要在IP Table山增加一些基础的规则。IP Table 规则来自于一系列可以组合起来创建各自的特定的处理方法的选项。每一个通过防火墙的包被所有的规则...  阅读全文
        posted @ 2015-10-31 15:51 Alpha 阅读(2061) | 评论 (0)编辑 收藏
        仅列出标题  下一页
        11选5时时彩软件
        1. <mark id="ghavm"><button id="ghavm"></button></mark>

            <listing id="ghavm"><strong id="ghavm"></strong></listing>
            <code id="ghavm"></code><rt id="ghavm"><label id="ghavm"><legend id="ghavm"></legend></label></rt>
            1. <tt id="ghavm"><button id="ghavm"></button></tt>

              1. <mark id="ghavm"><button id="ghavm"></button></mark>

                  <listing id="ghavm"><strong id="ghavm"></strong></listing>
                  <code id="ghavm"></code><rt id="ghavm"><label id="ghavm"><legend id="ghavm"></legend></label></rt>
                  1. <tt id="ghavm"><button id="ghavm"></button></tt>