服务器程序规范,需要强化和遵守的,作者给列了4条规范:
1、Linux服务器程序一般以后台进程形式运行,也就是以daemon守护进程的方式,守护进程的父进程通常是init进程(PID进程为1),作者在7.6 服务程序后台化给出了一个程序的清单,还是很有参考意义的。后台进程形式运行,也就是通过fork一个子进程,结束父进程的方式运行,这样避免很多前台启动,随着操作终端界面的关闭而结束服务器程序的运行;
Linux服务器程序的用户信息也是容易忽略和出问题的地方,UID/EUID/GID/EGID,如果应用程序需要操作某个配置文件,但又没有操作权限就悲剧了,所以需要确定好应用程序文件的权限组,以及可能操作配置文件的权限组很重要;
EUID标识这个应用程序文件的所属id(即文件的所有者的用户id);
EGID的含义与EUID类似,给运行目标程序的组用户提供有效组的权限;
避免应用程序的启动使用root账户启动;
进程组:每个进程都隶属于一个进程组,因此除了PID信息之外,还有进程组ID(PGID),每个进程组都有一个首领进程,其PGID和PID相同。
2、Linux服务器程序通常有一套日志系统,至少能输出日志到文件,有的高级服务器还能输出日志到专门的UDP服务器,大部分后台进程都在/var/log目录下拥有自己的日志目录。
这里需要关注就是日志的归档,如果使用系统的调试信息输出到/var/log的方式,则归档由系统自动来完成,存在在自定义日志路径的服务器程序,需要关注日志的归档,我们经常有项目中出现打印几十个G的日志,导致服务器磁盘空间被打爆,系统响应缓慢的事故;
3、Linux服务器程序通常是可配置的,通常能处理很多命令行选项,如果一次运行的选项太多,则可以用配置文件进行管理。绝大多数服务器程序都有配置文件,并存放在/etc目录下,比方nginx默认在/etc/nginx/nginx.conf。
系统资源限制,通过使用ulimit命令修改当前shell环境下的软限制或者硬限制,这种修改对该shell启动过的所有后续程序有效,也可以通过修改配置文件来改变系统软限制和硬限制,并且是永久的,比如ulimit: 修改Linux操作系统对一个进程打开的文件句柄数量的限制,配置:
>命令方式(暂时):ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024
>将修改命令写入~/.bashrc 文件,或修改配置文件(永久):vi /etc/security/limits.conf
通常优化centos系统的网络参数如下:
终端输入 vim /etc/sysctl.conf 打开配置文件,将下列内容复制进文件后保存。
```text
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save = 1
net.core.somaxconn = 22144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
vm.overcommit_memory = 1
fs.file-max = 2000000
fs.nr_open = 2000000
```
优化句柄数:终端输入 vim /etc/security/limits.conf 打开配置文件,配置如下两项后保存。
```text
* soft nofile 1200000
* hard nofile 1200000
```
4、Linux服务器进程通常会在启动的时候生成一个PID文件并存放在/var/run目录中,以记录该后台进程的PID,