
linux
高司机
公众号:游戏开发司机 资深游戏服务器,曾就职IBM LSF,淘米网,网易雷火
-
原创 如何禁止掉root登录,使用key密钥登录
在Linux系统下执行命令:ssh-keygen -t rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keysvim /etc/ssh/sshd_configAuthorizedKeysFile .ssh/authorized_keysRSAAuthentication yesPubkeyAuthentication yesPasswordAuthentication noservice sshd r...2020-07-27 17:07:34101
0
-
原创 screen命令使用说明
有些程序写的很操蛋,比如放到后台执行,但后边还需要再切回前台来重新执行,这个时候我们选择screen工具:screen -d -m -S LoginServer[6001] ./run_login_server.sh具体的screen命令包含哪些参数,可以参考screen --help我们选择跟踪哪个screen的会话,使用screen -list比如我们要使用7794这个会话,screen -r 7794使用完毕后切回到后台,Ctr+a 按下后再按下d。...2020-05-26 18:10:59292
0
-
原创 Shell脚本自动监控docker容器的状态
首先我们来写一个脚本root@server:~# cat docker_monitor.sh#!/bin/bash#监控容器的运行状态#容器名称 传入参数containerName=$1#当前时间now=`date +"%Y-%m-%d %H:%M:%S"`# 查看进程是否存在exist=`docker inspect --format '{{.State.Runni...2020-04-01 15:41:061726
0
-
原创 Jmeter测试并发https请求成功了
首先要安装jmeter2.4版本的,而且不建议大家使用badboy,因为这存在兼容性问题。对于安装,我就不讲了,我就说说如何测试https,想必大家都在网上找相关资料找疯了,我几乎也是呀。 有这么一个网页, http://jmeter.512011-08-10 14:31:1742143
1
-
转载 epoll的内核实现
epoll是由一组系统调用组成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, in2012-10-18 14:00:017211
0
-
原创 GCC在C语言中内嵌汇编 asm __volatile__
在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。1、简单的内嵌汇编例: __asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"as2020-11-20 09:45:0867935
6
-
原创 map类的erase方法的在Linux与Windows中的差异
这次的代码是跨平台的,尼玛在win32上通过,但是在linux上不通过了,查找了一下原来是平台linux不支持。1 #include 2 #include 3 #include 4 5 using namespace std;6 7 int main(int argc, char* argv[])8 {9 map MyMap;10 112014-01-20 17:29:527926
0
-
转载 Linux内核OOM机制的详细分析
Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。典型的情况是:某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障,原因是sshd进程被OOM killer杀掉了(多次遇到这样的假死状况)。重启机器后查看系统日志/var/log/mes2014-06-18 11:25:156143
0
-
原创 关于linux的进程中的各个线程cpu占用情况的分析和查看
我们经常会在新开的服搭建一个游戏的服务器,有时候要进行压力测试,那么如何来看呢,一般我们会通过top命令查看各个进程的cpu和内存占用情况,获得到了我们的进程id,然后我们也许会通过pstack命令查看里边的各个线程id以及对应的线程现在正在做什么事情,分析多组数据就可以获得哪些线程里有慢操作影响了服务器的性能,从而得到解决方案。比如这样的以组数据:[root@AY130816144542122014-11-18 19:36:4127007
0
-
原创 关于NFS服务器的原理总结和mount挂载
nfs服务器的原理 以及如何mount挂载一个目录2015-01-26 16:54:5714926
0
-
转载 libcurl编程
一、curl简介curl是一个利用URL语法在命令行方式下工作的文件传输工具。它支持的协议有:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTT2011-08-10 14:39:531735
0
-
转载 pthread_attr_init线程属性
1.线程属性 线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。 1.名称::pthread_attr_init/pthread_attr_destroy2011-08-26 10:41:0437292
8
-
转载 linux 中阻塞与非阻塞 同步与异步
简单点说: 阻塞就是干不完不准回来, 非阻塞就是你先干,我先看看有其他事没有,完了告诉我一声。我们拿最常用的send和recv两个函数来说吧。比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话,这2012-11-21 12:24:075958
0
-
原创 setsockopt()用法(参数详细说明)
先来看看函数的原型:int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);然后我们来看看参数:s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: IPv4套接口IPP2013-12-10 11:34:1814001
0
-
转载 对于linux socket与epoll配合相关的一些心得记录
对于linux socket与epoll配合相关的一些心得记录没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的int nRecvBuf=32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));1、通过上面语句可以简单设置缓冲区大小,测试证明2013-12-02 22:29:027829
0
-
转载 linux下安装boost
以下是在ubuntu 7.10 (内核 2.6.22-14)下安装的例子:一、下载最新的 boost 库,下载地址: http://www.boost.org/users/download/ 二、在适当的位置解压 boost 库,推荐把 boost 库解压到 /usr/local/ 下: $ cd dowload/ # 这个地方替换成你的boost库下载目录$ tar xvjf b2013-03-28 14:13:21769
0
-
转载 linux下的RPC
一、概述在传统的编程概念中,过程是由程序员在本地编译完成,并只能局限在本地运行的一段代码,也即其主程序和过程之间的运行关系是本地调用关系。因此这种结构在网络日益发展的今天已无法适应实际需求。总而言之,传统过程调用模式无法充分利用网络上其他主机的资源(如CPU、 Memory等),也无法提高代码在实体间的共享程度,使得主机资源大量浪费。而本文要介绍的RPC2013-02-28 17:40:5610746
0
-
转载 online游戏服务器架构--数据库及事件相关 .
Online服务器的第三部分就是数据层,send_request_to_db开始了数据层的处理逻辑:int send_request_to_db(int cmd, sprite_t* p, int body_len, const void* body_buf, uint32_t id);在该函数里首先以懒惰的方式连接数据库服务器,获取一个网络连接,注意参数p,如果该参数为空,那么就说明不关2012-11-24 00:35:055967
0
-
转载 online游戏服务器架构—用户登录数据组织 .
sprite_t类型的数据结构是核心数据结构,每一个登录用户对应一个,它的初始化在用户登录的时候,此后一直到用户退出或者离线一直保存在系统内存当中,在此过程中该sprite_t数据结构被保存在两个哈希表当中,一个是以用户的id为索引,这个是逻辑相关的,另一个是以此连接的套结字描述符为索引,这个是逻辑无关的:int parse_protocol(uint8_t *data, int rcvlen2012-11-24 00:33:126013
0
-
转载 online游戏服务器架构--网络架构
启动:父进程启动;子进程启动;网络架构。每个父进程携带N个子进程,子进程负责处理业务逻辑和其它数据,而父进程只是将客户端的请求路由到各个子进程,路由的策略非常简单,父进程将请求包按照轮流的法则分发到这N个子进程。子进程接收到请求包的时候,它便开始处理,处理完后再将结果反还给父进程。注意,子进程并不处理网络连接,它并不知道请求包的源的信息,它只处理业务,相反地,父进程并不知道请求包的内容,它2012-11-24 00:14:475993
0
-
转载 valgrind工具使用详解
zz自 http://blog.csdn.net/destina/article/details/6198443 感谢作者的分享!一 valgrind是什么?Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它2015-01-08 11:33:456897
0
-
原创 关于valgrind的安装和内存泄露分析
程序的安装如果使用的是tar包安装. valgrind# wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2# tar -jxvf valgrind-3.9.0.tar.bz2# cd valgrind-3.9.0# ./autogen.sh# ./configure# make; make install2015-01-08 11:43:417825
0
-
转载 NAT原理
网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。下面介绍两类不同方式实现的NAT:NAT(Network Address Translators):称为基本的NAT在客户机时 192.168.0.8:4000——6.7.8.9:8000在网关时 1.2.3.4:2017-11-10 09:47:52746
0
-
转载 redis3.0.0 集群安装详细步骤
Redis集群部署文档(centos6系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.2016-02-26 09:42:41731
0
-
转载 Redis集群添加节点
Redis集群添加节点1:首先把需要添加的节点启动cd /usr/local/cluster/mkdir 7006cp /usr/local/cluster/redis.conf /usr/local/cluster/7006/cd /usr/local/cluster/7006/vi redis.conf##修改redis2016-02-26 12:21:41797
0
-
转载 在GCC和Visual Studio中使用hash_map
熟悉STL或熟悉ACM/ICPC的话,其中的set, map, multiset, multimap一定用过无数次了,它们都是用平衡二叉树(红黑树)实现的,复杂度为O(lgn)。我们也知道set, map可以通过哈希来实现,复杂度只有O(1),可惜直到现在,unsorted_set或hash_map都没能成为C++标准的一部分(C++0x,- -b)。不过无论在GNU GCC中还是Microsof2016-02-18 11:15:481964
0
-
原创 关于遍历linux的文件目录的坑- readdir
去年给公司写了一个配置服务器,目的是解决运维的工作量太大,而且传送服务器需要的配置文件需要脚本传送到各个服(每个服ip不一样,需要scp),然后再刷新通知各个GameServer,中间有没有传送失败并不得知,而且维护相当麻烦,所以我写了这个服务器,所有区服的配置都在这里边,不同的区服通过编号创建不同的目录,在对应目录下放服务器的配置,架构我就不说了,有兴趣的可以私聊。运行了很久了,突然遇到一个2015-08-20 12:21:299274
0
-
转载 Linux查看CPU和内存使用情况
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。top命令是Linux下常用的性能分析2015-08-18 20:46:14774
0
-
原创 epoll的再次认识
使用mmap加速内核与用户空间的消息传递。这 点实际上涉及到epoll的具体实现了。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很 重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你想我一样从2.5内核就关注epoll的话,一定不会忘记手工 mmap这一步的。顺便看一下 EPOLLET 和 E2015-04-20 17:10:44976
0
-
转载 tcpcopy使用方法
1、下载tcpcopyhttp://code.google.com/p/tcpcopy/downloads/list2、配置、编译、安装依此使用如下命令:配置:./configure 编译:make安装:make install 3、使用方法下面以mosquitto为例,说明tcpcopy的用法,tcp2015-03-18 16:14:406677
0
-
转载 加速scp传输速度
当需要在机器之间传输400GB文件的时候,你就会非常在意传输的速度了。默认情况下(约125MB带宽,网络延迟17ms,Intel E5-2430,本文后续讨论默认是指该环境),scp的速度约为40MB,传输400GB则需要170分钟,约3小时,如果可以加速,则可以大大节约工程师的时间,让攻城师们有更多时间去看个电影,陪陪家人。目录1. 结论2. 测试数据:加密算法和压缩的影响3.2015-03-13 16:26:0613083
0
-
转载 scp免密码远程拷贝
有些时候,我们在复制/移动文件 到另一台机器时会用到scp,因为它比较安全。但如果每次都要输入密码,就比较烦了,尤其是在script里。不过,ssh有另一种用密钥对来验证的方式。下面写出我生成密匙对的过程,供大家参考。第一步:生成密匙对,我用的是rsa的密钥。使用命令 "ssh-keygen -t rsa"[user1@rh user1]$ ssh-keygen -t2015-03-10 17:13:332443
0
-
转载 关于关闭SELinux的方法
原贴:http://www.diybl.com/course/6_system/linux/Linuxjs/2008629/129166.html关闭SELinux的方法:修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。如果不想重启系统,使用命令setenforce 0注:setenforce 1 设置SELinux2015-03-06 15:16:05574
0
-
转载 system函数的返回值和执行脚本的返回值
1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。2、如何正确判断test.sh是否正确执行?仅判断status是否==0?或者仅判断status是否!=-1?都错!2015-03-19 17:43:235301
0
-
转载 Google Protobuf 使用介绍
直接在 www.google.com.hk 上搜索google protobuf 后下载官方版本。官方版本支持C++\Java\Python三门语言。还有很多非官方的语言版本支持,如C\NET(C#/Vb.net)\Flex(AS3)等. 要通信,必须有协议,否则双方无法理解对方的码流。在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用2015-03-25 14:14:09796
0
-
转载 tcpdump的用法
第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,2015-01-15 18:19:33828
0
-
转载 Crontab的格式
第1列分钟1~59第2列小时1~23(0表示子夜)第3列日1~31第4列月1~12第5列星期0~6(0表示星期天)第6列要运行的命令下面是crontab的格式:分 时 日 月 星期 要运行的命令这里有crontab文件条目的一些例子:30 21 * * * /usr/local/apache/bin/apachectl restart上面的例子表示每晚的212015-01-14 19:36:524799
0
-
原创 如何正确编写linux守护进程
1、守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。2、创建守护进程步骤1)创建子进程,父进程退出 之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行2012-11-12 09:21:226027
1
-
转载 RPC编程
图 3 说明在客户机和服务器之间完成 RPC 涉及的步骤。图 3. 在客户机和服务器之间完成 RPC 涉及的步骤 服务器 RPC 应用程序初始化期间它会向 RPC 运行时库注册接口。需要注册接口是因为,客户机在向服务器发出远程过程调用时,要检查它是否与服务器兼容。服务器创建绑定信息并把信息存储在名称服务数据库中,客户机可以访问这个数据库并寻找到服务器的连接信息。服务器如果使2012-09-20 09:30:24976
0
-
转载 RPC学习笔记
在查看libc6-dev软件包提供的工具(用 dpkg -L libc6-dev 命令)的时候,发现此软件包提供了一个有用的工具rpcgen命令。通过rpcgen的man手册看到此工具的作用是把RPC源程序编译成C语言源程序,从而轻松实现远程过程调用。下面的例子程序的作用是客户端程序取中心服务器上时间的,编程过程如下:先编写一个 “ RPC 语言 ” ( RPC Language (2012-09-20 10:30:251651
1