服务器程序规范,需要强化和遵守的,作者给列了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,

《Linux高性能服务器编程》读书笔记:linux服务器程序规范相关推荐

  1. Linux设备驱动程式之读书笔记(二) [转]

    http://www.sudu.cn/info/html/edu/code/20070102/286543.html setlevel.c 非常实用 google 查找 #define _syscal ...

  2. Linux C 应用编程学习笔记——(1)应用编程概念

    <[正点原子]I.MX6U嵌入式Linux C应用编程指南>学习笔记 系统调用 由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Program ...

  3. 关于高性能mysql的读书报告_《高性能MySQL》读书笔记:第一章[MySQL架构与历史]...

    <高性能MySQL>读书笔记:第一章[MySQL架构与历史] MySQL逻辑架构 MySQL最优秀的一点就是它的存储架构,将查询处理,系统任务,数据存储/提取相分离 并发控制 通过读写锁实 ...

  4. 【读书笔记】【程序员的自我修养 -- 链接、装载与库(三)】函数调用与栈(this指针、返回值传递临时对象构建栈、运行库与多线程、_main函数、系统调用与中断向量表、Win32、可变参数、大小端

    文章目录 前言 介绍 内存 内存布局 栈与调用惯例 堆与内存管理 运行库 入口函数和程序初始化 C/C++运行库 运行库与多线程 C++全局构造与析构 fread 实现 系统调用与API 系统调用介绍 ...

  5. linux多线程服务端编程读书笔记——第三章

    本章作者主要是总结了一两种常用的线程模型.归纳了进程通信与线程同步的最佳实践 进程与线程的区别: 进程是文件系统中的最重要的两个概念之一(令一个是文件).简单地说,一个进程是内存中正在运行的程序.每个 ...

  6. 《鸟哥Linux私房菜》读书笔记0\1\2\3\4章

    文章目录 一.计算机硬件和Linux的诞生(对应第0.1章): 二.磁盘(对应第2章): 1.MBR--Master Boot Record(过时) 2.GPT--GUID partition tab ...

  7. Linux学习-Linux系统及编程基础笔记

    useradd zhangsan passwd zhangsan visudo往/etc/sudoers文件中添加zhangsan #visudo 找到如下的行 root ALL=(ALL) ALL ...

  8. Python编程读书笔记

    Chapter 2. python编程概述 2.1. 知识点 raw_input是python的内建函数,要求用户输入,输入结果是一个字符串. example: test = raw_input(&q ...

  9. linux 创建线程函数吗,[笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include #define CreateThreadEx(tid,threadFun,args) ...

  10. 【linux草鞋应用编程系列】_4_ 应用程序多线程

    一.应用程序多线程 当一个计算机上具有多个CPU核心的时候,每个CPU核心都可以执行代码,此时如果使用单线程,那么这个线程只能在一个 CPU上运行,那么其他的CPU核心就处于空闲状态,浪费了系统资源: ...

最新文章

  1. 浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁移
  2. 分页符与分节符的区别
  3. 2020-12-03 The Geometry of Rotations and Rigid-Body Motions (刚体运动和旋转的几何表示,罗德里格参数)
  4. spring相关API
  5. windows 虚拟地址映射到物理地址
  6. 认识HttpModule
  7. ❤️作为测试行业的过来人,宝贵的经验分享给刚入行的你
  8. NDoc使用简要手册 及中文支持(转)
  9. gstreamer的rtsp推流(笔记)
  10. 烂泥:windows server 2008取消关闭事件跟踪
  11. python自动化,自动登录并且添加一个门店
  12. 地市级地铁数据管理信息系统解决方案
  13. 八数码问题引发的思考
  14. 广义线性模型matlab,使用广义线性模型拟合数据
  15. GO语言中文字符串编码转换
  16. UOJ#449. 【集训队作业2018】喂鸽子(期望dp)
  17. WinCC 高速数据采集的实现
  18. 广义瑞利商_瑞利商定义和广义瑞利商
  19. 怎么提取PDF页面,PDF页面提取的操作步骤
  20. 软件人眼中的APP的产品定位

热门文章

  1. 有道词典中的OCR功能:第三方库的变化
  2. 百度2013校园招聘笔试题(答案整理) – 机器学习/数据挖掘工程师
  3. java获取摄像头信息_Windows下JavaCV获取摄像头图像
  4. IOS应用内存泄露问题的检测及定位
  5. 哈尔滨计算机省一级考试时间,【通知公告】2017年上半年省计算机等级考试哈尔滨师范大学考点报名通知...
  6. Revit Navisworks 二次开发—获取材质贴图
  7. php 上传ppt,PHP实现文件上传PPT精品文档
  8. python樱花武汉_武汉加油!武大本科生用Python敲出樱花绽放,满屏春天太浪漫
  9. python之线性代数矩阵运算
  10. 【网络安全】网络安全概论(练习题)