服务器程序规范需要强化和遵守的,作者列出了以下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启动的所有后续程序有效。也可以通过修改配置文件来永久改变系统的软限制和硬限制。例如,修改Linux操作系统对一个进程打开的文件句柄数量的限制,配置如下:
命令方式(临时):ulimit -n xx 修改每个进程可打开的文件数,默认值为1024
将修改命令写入~/.bashrc文件,或修改配置文件(永久):vi /etc/security/limits.conf
通常优化CentOS系统的网络参数如下:
终端输入vim /etc/sysctl.conf打开配置文件,将以下内容复制进文件后保存。
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打开配置文件,配置如下两项后保存。
* soft nofile 1200000 * hard nofile 1200000
4、Linux服务器进程通常在启动时生成一个PID文件并存放在/var/run目录中,用于记录该后台进程的PID。
以上就是《Linux高性能服务器编程》读书笔记:linux服务器程序规范的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号