服务器学习心得


部署

<h2>多线程实现</h2> <ul> <li>采用同一个地址空间实现</li> </ul> <h2>多线程产生的问题</h2> <ul> <li>如果一个线程中代码写的不够健壮,导致某一段地址空间越界,出现错误,从而导致整个地址空间的线程不可用</li> </ul> <h2>什么是信号量</h2> <ul> <li>信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。</li> <li>信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。 <ul> <li>若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。</li> </ul></li> </ul> <h2>信号量的分类</h2> <ul> <li>内核信号量,由内核控制路径使用</li> <li>用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYSTEMV信号量。 <ul> <li>POSIX信号量又分为有名信号量和无名信号量。</li> <li>有名信号量,其值保存在文件中, 所以它可以用于线程也可以用于进程间的同步。</li> <li>无名信号量,其值保存在内存中。</li> </ul></li> </ul> <h2>查看所有的信号量</h2> <pre><code class="language-shell">kill -l</code></pre> <h2>常用信息量</h2> <pre><code class="language-shell">SIGCHLD kill -17 $PID SIGQUIT kill -3 $PID SIGTERM kill -15 $PID SIGKILL kill -9 $PID SIGHUP kill -1 $PID SIGUSR1 kill -10 $PID SIGUSR2 kill -12 $PID SIGWINCH kill -28 $PID</code></pre> <h2>使用信号量管理nginx进程</h2> <ul> <li> <p>Master进程</p> <ul> <li>监控worker进程</li> <li>CHLD</li> <li>管理worker进程</li> <li>接收信号</li> <li>TERM,INT,QUIT,HUP,USR1,USR2,WINCH</li> </ul> </li> <li> <p>Worker进程</p> <ul> <li>接收信号</li> <li>TERM,INT,QUIT,USR1,WINCH</li> </ul> </li> <li> <p>命令行</p> <pre><code class="language-shell">reload: HUP reopne: USR1 stop: TERM quit: QUIT</code></pre> </li> </ul> <h2>设置子进程数量</h2> <ul> <li>配置文件中</li> <li>worker_processes 进程数量</li> </ul> <h2>查看CPU信息</h2> <pre><code class="language-sehll">lscpu</code></pre> <h2>reload重载配置文件的流程</h2> <ul> <li>向master进程发送HUP信号(reload命令)</li> <li>master进程检查配置语法是否正确</li> <li>master进程打开监听端口</li> <li>master进程使用新的配置文件启动新的worker子进程</li> <li>master进程向老的worker子进程发送QUIT信号</li> <li>旧的worker进程关闭监听句柄,处理完当前连接后关闭进程</li> </ul> <h2>热升级的流程</h2> <ul> <li>将旧的nginx文件替换成新的nginx文件 <ul> <li>配置文件,版本,目录结果都要一样???</li> </ul></li> <li>向旧的master进程发送USR2信号</li> <li>旧的master进程修改pid文件,加后缀.oldbin</li> <li>旧的master进程用新nginx文件启动新master进程</li> <li>向旧的master进程发送WINCH信号,旧的worker子进程退出</li> <li>回滚情形 <ul> <li>向旧的master进程发送HUP,向新的master进程发送QUIT</li> </ul></li> </ul> <h2>热部署(平滑升级)</h2> <pre><code class="language-shell"># 查看nginx进程 ps -ef | grep nginx # 查看nginx版本,配置的命令,使用大V命令 nginx -V # 进入到nginx目录,备份nginx cp nginx nginx.bak # 查看nginx进程 ps -ef | grep nginx # 发送信号 kill -s SIGUSR2 nginx主进程号 # 查看nginx进程 ps -ef | grep nginx # 会查看到旧的nginx进程和新的nginx进程同时存在 # 停止旧的nginx版本子进程 kill -s SIGWINCH 旧的nginx主进程号 # 查看nginx进程 ps -ef | grep nginx # 退出旧的nginx主进程 # 如果验证了新功能和修复的bug都没有问题 kill -s SIGQUIT 旧的nginx主进程号 # 升级完了,回滚 kill -s SIGHUP 旧的nginx主进程号</code></pre> <h2>定制编译安装第一个Nginx</h2> <h4>下载源码包</h4> <ul> <li>zlib-1.2.11.tar.xz</li> <li>pcre-8.43.tar.gz</li> <li>nginx-1.16.1.tar.gz</li> </ul> <h4>解压源码包</h4> <pre><code class="language-shell">tar xf zlib-1.2.11.tar.xz tar xf pcre-8.43.tar.gz tar xf nginx-1.16.1.tar.gz</code></pre> <h4>安装nginx相关依赖</h4> <ul> <li>也可以在安装nginx中,看报错信息,来看需要提前安装那些nginx库</li> </ul> <pre><code class="language-shell"># 安装gcc和gcc-c++编译器 yum install gcc gcc-c++ # 安装openssl和openssl-devel库 yum install openssl openssl-devel # 安装gd和gd-devel库 yum install gd gd-devel -y</code></pre> <h2>编译安装nginx(rpm源码包方式安装)</h2> <pre><code class="language-sehll"># 进入到nginx目录 cd nginx-1.16.1 # 查看configure文件 less configure # 查看configure参数有哪些 ./configure --help # 指定安装目录 ./configure --prefix=安装目录 --conf-path=配置目录 --user=nginx --group=nginx # 很多参数可以指定,也可以不指定,选择默认目录 # 进行编译 make # 查看编译后的相关文件 ls -rlt # 查看Makefie less Makefie # 执行安装 make install # 查看安装成功的相关文件 ls -rlt # 启动nginx # 使用rpm源码包方式安装,默认是没有nginx用户,要添加一个nginx用户 useradd nginx # 关闭防火墙(centOS 7) systemctl stop firewalld systemctl disable firewalld # 取得selinux的状态 getenforce # 关闭selinux setenforce 0 # 如果需要永久关闭selinux # 进入到sysconfig文件 vim /etc/sysconfig/selinux # 设置selinux禁用 selinux=disabled # 生效配置文件(如果修改配置文件) nginx安装目录 -s reload</code></pre>

页面列表

ITEM_HTML