最近一直只在搭建公司游戏服务器的运行环境。
ps背景: 使用java开发,之前一直都是在window环境下开发的,现在要将项目部署到linux环境下 ,所以历程缓慢啊。。。
说说过程中都遇到啥吧!
1.编译:用Eclipse做开发,调试方便,但是开发时用到的jar包、引用的java源码项目都是到处乱放的,最后部署的时候不会再使用Eclipse了。所以就用到了ant这个方便的工具, 只要建一个build.xml文件在里面描述所有要到的包和源码,将编译生成的class文件和jar库复制到相同的地方,最后只是这么个结果:
ROOT:
class文件夹:所有的class
lib文件夹: 所有的jar库
cofig文件夹:所有配置文件
然后写个基于fpt协议的脚本,将ROOT整个文件夹上传到linux服务器上。
2.运行:linux下使用sh脚本来启动服务器,启动过程都遇到几个坎啊!
shell最主要内容:
nohup java -Xms512m -Xmx1024m -Xmn256m -cp "./:./class/:/lib/*" main.class
启动过程最重要的几个JVM参数:Xms启动时的内存、Xmx运行过程中最大的内存、Xmn当最初的内存不够用时增加的内存。
-cp 则是指定在这些文件夹中查找所有的class和jar文件,“./”表示要去jre中找,运行时出现找不到主类,原来window下-cp参数中使用封号;来分隔文件夹,但是linux下是使用冒号:来分隔的,当然也有可能是少了"./"这一项,最基础的jre都没有肯定是有问题的。nohup是让java进程运行时不会在控制台下打印出信息而是将这些信息存储在noput.out文件中。
运行脚本后服务器跑起来了,但是只要脚本运行完毕或者Ctrl+C退出java进程也退出了,原来需要在后面添加‘&’符号,这样退出脚本后进程也会在后台继续运行。
linux对于所有用户起的进程有一些限制:一个进程默认最多同时打开1024个文件,对于游戏服务器这种进程是需要保持非常多的socket连接的,也就是会同时打开远多于1024个文件,在脚本开头添加ulimit -n 60000,表示可同时打开60000个文件,然后又出问题了。linux还对用户有一个硬的上限,60000超过了这个上限就会有问题,关于这个可以修改(root用户才有这权限)linux下/etc/security/limits.conf文件,添加 * hard nofile 60000 (*所有用户同时打开文件的硬上限),这个还包括了一些其他的上限,文件里已经有了格式的说明,对应的也有一个软上限(user/@group soft item number)。
过程中当然还有数据库(mysql、memcached)等的安装和配置,不想继续了,呵呵。
目前最困惑的还是不知道该用什么方式来实现数据库里数据的时效性(一些数据每天或者每周都是要清空的,总不能弄个定时器到点了一下子把数据全清了吧,这样清数据的那个时间点拿数据会卡的!!!)。