
Linux
xiaowhy
这个作者很懒,什么都没留下…
展开
-
短时间大量连接时,服务对外端口不能访问的问题
最近一个服务在早上有大量连接,超过22w,连上时,会有对外服务不能访问问题,从而导致被云检查关闭重启的问题,经查出,是内核一参数设置过小导致,当有大量连接超过时,超出的连接会被丢弃。net.nf_conntrack_max 和net.netfilter.nf_conntrack_max值内核参数 net.nf_conntrack_max 系统默认值为”65536”,当nf_conntrack模块被装置且服务器上连接超过这个设定的值时,系统会主动丢掉新连接包,直到连接小于此设置值才会恢复。同时内核参数原创 2022-05-26 17:25:44 · 2305 阅读 · 0 评论 -
定时器timer_create timerfd_create
一、timer_create进程可以通过调用timer_create()创建特定的定时器,定时器是每个进程自己的,不是在fork时继承的,不会被传递给子进程。编译时加编译选项 -lrt。包含头文件<time.h>1. timer_createint timer_create(clockid_t clockid, struct sigevent *sevp, timer_t *timerid);参数:(1) clockid定义了定时器计时的方法,有如下几个值: CL...转载 2022-02-24 14:04:19 · 9448 阅读 · 0 评论 -
__attribute__作用
__attribute__用法attribute((constructor))在main函数之前,执行一个函数,便于我们做一些准备工作__attribute((constructor))void before(){printf(“before main\n”);}attribute((destructor))在main()函数退出或者调用了exit()之后调用__attribute((destructor))void after(){printf(“before main\n”);}原创 2021-08-28 10:37:32 · 318 阅读 · 0 评论 -
linux -rpath作用,指定默认库查找路径
转载:https://blog.youkuaiyun.com/q1302182594/article/details/42102961/结论:-rpath和-rpath-link都可以在链接时指定库的路径;但是运行可执行文件时,-rpath-link指定的路径就不再有效(链接器没有将库的路径包含进可执行文件中),而-rpath指定的路径还有效(因为链接器已经将库的路径包含在可执行文件中了)。 最后,不管使用了-rpath还是-rpath-link,LD_LIBRARY_PATH还是有效的。可以在编..转载 2021-08-28 10:09:41 · 1191 阅读 · 0 评论 -
一个Linux程序的执行过程的详解
execve()另一方面,在子进程中会调用execve()加载test并开始执行。这是test被执行的关键,下面我们详细分析一下。execve()是操作系统提供的非常重要的一个系统调用,在很多文章中被称为exec()系统调用(注意和shell内部exec命令不一样),其实在Linux中并没有exec()这个系统调用,exec只是用来描述一组函数,它们都以exec开头,分别是:#includeint execl(const char *path, const char *arg, ...);int原创 2021-08-19 17:08:56 · 405 阅读 · 0 评论 -
sed替换/* */内容
使用sed替换/* */ 的内容比如/* testaaa */ abcd ,要把/* testaaa */内容去掉sed "s/\/\*.*\*\//\/* *\//g" test.txt\和*都要使用转义符,.* 表示中间所有字符原创 2021-03-13 13:00:57 · 807 阅读 · 0 评论 -
线程局部变量与likely,unlikely
linux下支持__thread 修饰线程局部变量,每个线程拥有自己单独的一份变量static __thread char buffer[1024];__thread int var = 0;likely 优化if,else效率#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)if(likely(foo)) //认为foo通常为1if(unlik..原创 2020-12-11 16:18:42 · 183 阅读 · 1 评论 -
crontab 每周和每月是OR的逻辑
最近一个月,一台测试服务器上的服务每周一来看,总是莫名的挂掉,又找不到原因,今天一查看crontab -l,再看/var/log/cron下的日志,才发现每周六被执行了restart脚本百度一下说crontab 日月份和周是OR的逻辑...原创 2020-06-22 10:09:14 · 442 阅读 · 0 评论 -
libevent学习篇之一:libevent快速入门
https://www.jianshu.com/p/8ea60a8d3abbLibEvent快速入门简介基本的socket变成是阻塞/同步的,每个操作除非已经完成,出错,或者超时才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没有办法支撑大量的请求。posix定义了可以使用异步的select系统调用,但是因为它采用了轮询的方式来判断某个fd是否变成active...转载 2019-03-05 11:20:02 · 3216 阅读 · 1 评论 -
并发高时公用锁拆分
当并发高时,可能存在多个连接公用一个锁,当有一个卡住时,会影响其他连接速度可以按某种规则,比如用户uid,将不同用户拆分到不同的锁上面去,临界区共享数据也同样的规则做拆分原创 2017-11-29 14:45:16 · 512 阅读 · 0 评论 -
读写锁写锁优先的坑
pthread_rwlockattr_setkind_np(&rwLockAttr,PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);可以设置写锁优先,当写锁和读写同时抢占时,写锁会优先执行,但这时读锁就不能在执行了,但同一个线程不能多次读锁当一个线程有多次调用读锁时,就可能会出现死锁了比如thread1 readlock readloc原创 2017-11-01 17:32:28 · 2813 阅读 · 0 评论 -
gdb 打印vector
gdb 7之前的版本不能直接打印vector,但是vector的内部实现是用数组array,所以找到array地址就可以打印出vector内容。 1) 打印整个vector(gdb) print*(myVector._M_impl._M_start)@myVector.size()2) 打印第N个成员 print *(myVector._M_impl._M_start)原创 2017-07-25 08:53:25 · 2448 阅读 · 0 评论 -
tcp缓冲区满的问题
服务端发送大量数据,接收端接收速度慢,缓冲区满的时候,接收端向服务端发普通的心跳包,send显示成功了,但服务端就是收不到,抓包看显示tcpzerowindow,将接收端缓冲区改大后正常了,改成了1M,但接收端接收缓冲区满了,为什么会影响接收端向服务端发包呢,他们不是2个缓冲区吗原创 2017-07-12 08:40:15 · 17864 阅读 · 3 评论 -
linux 抓包命令
curl ifconfig.me查看外网ip抓包命令:tcpdump -i eth1 -s0 tcp port 2860 -w ./tt.cap使用wireshark工具分析 tt.cap ,eth1指定网卡查看性能ps -o majflt,minflt -C emsmajflt比较大对性能影响比较大,比如读磁盘原创 2017-07-25 09:00:27 · 576 阅读 · 0 评论 -
一次rpm包误删恢复linux系统过程
1.linux突然提示连接不上,bash相关的命令都找不到,重启后提示 /bin/sh:ro: No such file or directory2.制作U盘操作系统,启动U盘操作系统后挂载linux硬盘,查看log发现 系统yum erase 了大量rpm包,导致系统相关的命令都缺失3.尝试从另外台服务器上将系统关键目录下文件拷贝过来,但发现在U盘操作系统里不能打包或解压,拷贝文件夹,又原创 2017-07-25 08:57:32 · 871 阅读 · 0 评论