linux编译命令优化 linux编译语句

在linux中如何编译C程序,使之成为可执行文件?如何调试?Gcc最基本的用法是∶gcc [options] [filenames]其中options就是编译器所需要的参数 , filenames给出相关的文件名称 。-c , 只编译,不连接成为可执行文件 , 编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件 。-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名 。如果不给出这个选项,gcc就给出预设的可执行文件a.out 。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项 。-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些 。-O2,比-O更好的优化编译、连接 , 当然整个编译、连接过程会更慢.
例子:
gcc -o test test.c
结果生成可执行文件test
linux 内核参数优化作为高性能WEB服务器,只调整Nginx本身的参数是不行的,因为Nginx服务依赖于高性能的操作系统 。
以下为常见的几个Linux内核参数优化方法 。
net.ipv4.tcp_max_tw_buckets
对于tcp连接,服务端和客户端通信完后状态变为timewait,假如某台服务器非常忙,连接数特别多的话,那么这个timewait数量就会越来越大 。
毕竟它也是会占用一定的资源,所以应该有一个最大值,当超过这个值,系统就会删除最早的连接,这样始终保持在一个数量级 。
这个数值就是由net.ipv4.tcp_max_tw_buckets这个参数来决定的 。
CentOS7系统 , 你可以使用sysctl -a |grep tw_buckets来查看它的值 , 默认为32768,
你可以适当把它调低 , 比如调整到8000 , 毕竟这个状态的连接太多也是会消耗资源的 。
但你不要把它调到几十、几百这样,因为这种状态的tcp连接也是有用的,
如果同样的客户端再次和服务端通信,就不用再次建立新的连接了,用这个旧的通道 , 省时省力 。
net.ipv4.tcp_tw_recycle = 1
该参数的作用是快速回收timewait状态的连接 。上面虽然提到系统会自动删除掉timewait状态的连接,但如果把这样的连接重新利用起来岂不是更好 。
所以该参数设置为1就可以让timewait状态的连接快速回收,它需要和下面的参数配合一起使用 。
net.ipv4.tcp_tw_reuse = 1
该参数设置为1,将timewait状态的连接重新用于新的TCP连接,要结合上面的参数一起使用 。
net.ipv4.tcp_syncookies = 1
tcp三次握手中 , 客户端向服务端发起syn请求 , 服务端收到后,也会向客户端发起syn请求同时连带ack确认,
假如客户端发送请求后直接断开和服务端的连接,不接收服务端发起的这个请求,服务端会重试多次,
这个重试的过程会持续一段时间(通常高于30s) , 当这种状态的连接数量非常大时,服务器会消耗很大的资源,从而造成瘫痪,
正常的连接进不来,这种恶意的半连接行为其实叫做syn flood攻击 。
设置为1,是开启SYN Cookies,开启后可以避免发生上述的syn flood攻击 。
开启该参数后,服务端接收客户端的ack后,再向客户端发送ack+syn之前会要求client在短时间内回应一个序号,
如果客户端不能提供序号或者提供的序号不对则认为该客户端不合法,于是不会发ack+syn给客户端,更涉及不到重试 。
net.ipv4.tcp_max_syn_backlog
该参数定义系统能接受的最大半连接状态的tcp连接数 。客户端向服务端发送了syn包,服务端收到后 , 会记录一下,

推荐阅读