标签: 服务器

Java版服务器开发总结

今天打算对之前进行多年的Java版服务器端开发进行下技术总结,以供大家参考。

个人对服务器开发基础框架平台有以下几点总结(会随时更新):

1、 网络设计(BIO(java.net包)和NIO(java.nio.channels包)两种方式,参考MINA(C/S), JETTY(B/S)、jsockets和jniosocket等开源项目)(参考资料O’reilly系列网络编程)

2、 传输协议设计(http、https、ftp、smtp等协议和自定义传输协议,基于TCP/IP协议之上)

3、 I/O处理设计(字节流(java.io包)和字符流到Buffer(java.nio包)缓冲区,*后把可以扩展到stream object 转换成POJO,将POJO转换成stream object的范围)(参考O’reilly系列的IO和NIO两本书籍)

4、 可以扩展的XML设计(可以跟其它语言(C++等)开发的系统进行交互请求信息,也是一种很重要的手段,包括解析(JDOM、DOM、SAX、DOM4j等)、生成、语言格式)

5、 管理设计(JMX(参考资料O’reilly系列JMX书籍。javax.management包),JFOXMX、MX4J开源项目)

6、 消息设计(JMS(参考资料O’reilly系列JMS书籍),OPENJMS开源项目)

7、 安全设计(访问控制器、数据加密、数据传输保护和授权(javax.crypto包)参考资料 O’reilly系列java安全书籍、传输加密(javax.net包)等)

8、 缓存设计(JCS(内存缓冲、索引式硬盘缓冲、并行式的分布缓冲和Client/Server式的缓冲)、CACHE4J、EOCACHE等)

9、 多线程池设计(concurrent开源项目,对应java.util.concurrent包)

10、事务处理(包括分布式事务处理)设计(暂缺,可能包含在15和12中==)

11、资源池(数据库连接池、socket连接池、线程池等)、对象池等开销大的资源设计 (可以参考比较优秀的开源项目中设计,可以完善自己的设计思想)

12、数据持久化设计(JDBC、Mybatis、JDO、HIBERNATE、Ibatis等开源项目)

13、WEB框架设计(基础框架SERVLET、SOAP技术。STRUTS、WEBWork、FLEX、WPF、JSF、AJAX、TAPESTRY等开源项目)

14、处理机制的异步设计(责任链设计、流水线设计等)

15、扩展到分布式设计(RMI(参考资料O’reilly系列RMI书籍java.rmi包)、JTA等)

16、扩展到命名空间设计(JNDI(参考资料The JNDI Tutorialjavax.naming包))

17、对象重用设计(这是在代码中要注意的,个人根据经验分析,需要每次创建的对象是请求对象和结果对象,中间过程的所需要的功能对象一般都可以做成重用的方式)

18、JVM的参数优化(类加载技术(包含热部署)属于外部部署,ANT开源项目,Maven)

19、服务器部署的目录结构:BIN、CONF、LIB、LOG目录等。

20、业务逻辑处理设计(根据实际情况来进行,SPRING、EJB、JDON等),严格的来说是另一个范畴。

21、组件设计(属于一些特定领域应用,例如JYTHON、JAVACC、HSQLDB、QUARTZ等开源项目)

22、通过在实际的使用过程中积累经验(解决使用中出现的问题)。

个人认为多核CPU的出现,今后的会发展成并行处理的设计方式和分布式等多个技术发展方面。目前才认识到大学里的基础知识给服务器开发(应该是很多方面)提供了很多基础设计的思想。

9和11可以合并。

10和12本人感觉有点像是业务逻辑处理的数据层面的东西,但还不能确定。

18和19可以合并成一部分,因为都是属于部署方面的。

主要相关技术归类:

%title插图%num

阿里云Centos7.x负载均衡服务器间代码定时同步

环境:Centos7.X
负载均衡的代码主/从rsync定时同步

A服务器(主服务器):

安装rsync:yum install rsync -y
vi /etc/rsyncd.conf

strict modes = yes

port = 873

uid = root

gid = root

use chroot = no

max connection = 5

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

hosts allow = 172.18..X.X #内网B服务器

[www.XXX.com-rsync] #此段的名称,在B服务器同步时需指定

path = /home/wwwdata/www.XXX.com

ignore errors

read only = no

list = no

hosts allow = 172.18.X.X #内网B服务器

auth users = root

secrets file = /etc/rsyncd.password

设置同步时需要的账号密码

vi /etc/rsyncd.password
root:123456
chmod 600 /etc/rsyncd.password

Centos7.x防火墙默认不是iptables,是firewalld,因此要通过firewalld将rsync的873端口开放给B服务器

开放873端口:firewall-cmd –permanent –add-port=873/tcp
检查是否开启成功:firewall-cmd –permanent –query-port=873/tcp
重启防火墙:firewall-cmd –reload

启动:rsync –daemon –config=/etc/rsyncd.conf
开机启动:echo ‘/user/bin/rsync –daemon –config=/etc/rsyncd.conf’ >> /etc/rc.local
B服务器(从服务器)

设置同步密码(此处应与A服设置的访问密码一致)

vi /etc/rsyncd.password
123456
chmod 600 /etc/rsyncd.password

写同步脚本:vi rsync_xxx

#!/bin/bash
/usr/bin/rsync -avzP –delete –progress –password-file=/etc/rsyncd.password root@172.18.0.X.X::www.XXX.com-rsync home/wwwdata/www.XXX.com
chmod u+x rsync_xxx

定时同步:

定时同步:crontab -e
*/1 * * * * /home/wwwdata/rsync-from-106-www.XXX.com >> /home/wwwdata/_bk/crontab_www_`date+\%Y\%m\%d`.log 2>&1
重新加载:service crond reload
查看执行日志:tail -f /var/log/cron
查看自定义日志:cat /home/wwwdata/_bk/crontab_www_2016-12-24.log

服务器之间代码同步 rsync

一、前期准备
服务器端:192.168.0.1
客户端(需要同步代码的机器):192.168.0.2

二、安装rsync
192.168.0.1和192.168.0.2机器都装上rsync
yum install rsync

注意服务器端192.168.0.1需要开放端口873,因为rsync默认监听873

三、服务器端配置
192.168.0.1服务器端配置rsyncd.conf文件,yum安装则是vim /etc/rsyncd.conf
编辑输入以下内容,关键地方已标红:

uid = root
gid = root
use chroot = no
max connections = 4

exclude = lost+found/ .svn/
#传输时候,不传这些目录

transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = .gz .tgz .zip .z .Z .rpm .deb .bz2

[test_php_deploy]
#自定义的标签名字,后续在客户端会用上

path=/root/.jenkins/workspace/test_php_deploy/
#客户端需要从服务器端同步的文件目录,存在于服务器端上

comment=test_php_deploy
自定义的标签名字,后续在客户端会用上

ignore errors
read only=yes
write only=no
list=no

auth user=root
#一个存在于服务器端的用户,如有多个逗号隔开,并且要求具有对需同步目录下的文件的读和执行权限。

secrets file=/etc/rsyncd.passwd
#存放用户名和密码的地方

hosts allow = 192.168.0.2
#代表允许所有的地址,安全起见,*好是客户端的地址。

四、配置服务器端的密码
vim /etc/rsyncd.passwd,无则服务器端新建,输入以下内容:
root:test2018

在服务器端新建后,改变权限
chmod 600 /etc/rsyncd.passwd

在服务器端,以daemon模式运行
rsync –daemon

五、在客户端执行
rsync -vzrtopg root@192.168.0.1::test_php_deploy /home/www/test/ –password-file=/etc/rsyncd.passwd –delete

命令解释:
root为服务器端的rsyncd.conf文件的auth user授权用户
192.168.0.1为服务器端ip
test_php_deploy为服务器端的rsyncd.conf文件的test_php_deploy模块
/home/www/test/为从服务器端同步文件到本地的指定目录
–password-file=/etc/rsyncd.passwd为用服务器端的密码文件
–delete为删除本地多余的目录文件,也就是与服务器端的目录文件匹配后不一样的多余文件

关于解决多台服务器间的文件实时同步问题

*近要做一个相关的解决方案,在虚拟机测试没有问题。给大家分享出来,有更好的解决方案,欢迎讨论。

1.1 inotify相关介绍

1、rsync

与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据 时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的 一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定 会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

2、inotify

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统 中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样 的一个第三方软件。
在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。

1.2 rsync+inotify同步逻辑图

1.3 环境部署

1、下载所需的安装包:

先把两个包放在/usr/src/下。

a、rsync下载路径:http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz/

b、inotify下载路径:http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

2、*台服务器(192.168.188.90)配置(不分主次):

a、安装rsync:

[root@nginx ~]# cd /usr/src/
[root@nginx src]# tar zxvf rsync-3.0.9.tar.gz
[root@nginx src]# cd rsync-3.0.9
[root@nginx rsync-3.0.9]# ./configure –prefix=/usr/local/rsync
[root@nginx rsync-3.0.9]# make
[root@nginx rsync-3.0.9]# make install
b、创建密码认证文件:
[root@nginx rsync-3.0.9]# cd /usr/local/rsync/
[root@nginx rsync]# echo “rsync-pwd” >/usr/local/rsync/rsync1.passwd
c、给密码文件赋予600权限:
[root@nginx rsync]# chmod 600 rsync1.passwd
d、安装inotify:
[root@nginx rsync]# cd /usr/src/
[root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz
[root@nginx src]# cd inotify-tools-3.14
[root@nginx inotify-tools-3.14]# ./configure –prefix=/usr/local/inotify
[root@nginx inotify-tools-3.14]# make
[root@nginx inotify-tools-3.14]# make install
e、创建监控脚本:
#!/bin/bash
host=192.168.188.89
src=/root/test/
des=web
user=webuser
/usr/local/inotify/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e’ -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg –delete –progress –password-file=/usr/local/rsync/rsync1.passwd $src $user@$host::$des
echo “${files} was rsynced” >>/tmp/rsync.log 2>&1
done
注意:host为第二台服务器IP,src为要监控的路径,web是认证模块名称,*后把监控脚本命名为rsync1.sh放在要监控的路径下。此处应是/root/test/
f、给监控脚本赋予764权限:

[root@nginx tmp]# chmod 764 rsync1.sh
g、创建rsync配置文件:
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web]
path = /root/test/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 192.168.188.89
hosts deny = *
list = false
uid = root
gid = root
auth users = webuser
secrets file = /usr/local/rsync/rsync1.passwd
该配置文件是用来接收另一台服务器的文件。其中web是server服务端(90服务器)的认证模块名称,需要与90服务器里的一致。把配置文件命名为rsync1.conf,放到/usr/local/rsync/目录里

h、启动该配置文件
[root@nginx-backup rsync]# /usr/local/rsync/bin/rsync –daemon –config=/usr/local/rsync/rsync1.conf
需要开机启动的话:
[root@nginx-backup rsync]# echo “/usr/local/rsync/bin/rsync –daemon –config=/usr/local/rsync/rsync1.conf” >> /etc/rc.local

3、第二台服务器(192.168.188.89)配置(不分主次):
a、安装rsync:

[root@nginx ~]# cd /usr/src/
[root@nginx src]# tar zxvf rsync-3.0.9.tar.gz
[root@nginx src]# cd rsync-3.0.9
[root@nginx rsync-3.0.9]# ./configure –prefix=/usr/local/rsync
[root@nginx rsync-3.0.9]# make
[root@nginx rsync-3.0.9]# make install
b、创建密码认证文件:
[root@nginx rsync-3.0.9]# cd /usr/local/rsync/
[root@nginx rsync]# echo “rsync-pwd” >/usr/local/rsync/rsync2.passwd
c、给密码文件赋予600权限:
[root@nginx rsync]# chmod 600 rsync2.passwd
d、安装inotify:
[root@nginx rsync]# cd /usr/src/
[root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz
[root@nginx src]# cd inotify-tools-3.14
[root@nginx inotify-tools-3.14]# ./configure –prefix=/usr/local/inotify
[root@nginx inotify-tools-3.14]# make
[root@nginx inotify-tools-3.14]# make install
e、创建监控脚本:
#!/bin/bash
host=192.168.188.90
src=/root/test/
des=web
user=webuser
/usr/local/inotify/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e’ -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg –delete –progress –password-file=/usr/local/rsync/rsync2.passwd $src $user@$host::$des
echo “${files} was rsynced” >>/tmp/rsync.log 2>&1
done
注意:host为第二台服务器IP,src为要监控的路径,web是认证模块名称,*后把监控脚本命名为rsync2.sh放在要监控的路径下。此处应是/root/test/
f、给监控脚本赋予764权限:

[root@nginx tmp]# chmod 764 rsync2.sh
g、创建rsync配置文件:
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web]
path = /root/test/
comment = web file
ignore errors
read only = no
write only = no
hosts allow = 192.168.188.90
hosts deny = *
list = false
uid = root
gid = root
auth users = webuser
secrets file = /usr/local/rsync/rsync2.passwd
该配置文件是用来接收另一台服务器的文件。其中web是server服务端(90服务器)的认证模块名称,需要与90服务器里的一致。把配置文件命名为rsync2.conf,放到/usr/local/rsync/目录里

h、启动该配置文件
[root@nginx-backup rsync]# /usr/local/rsync/bin/rsync –daemon –config=/usr/local/rsync/rsync2.conf
需要开机启动的话:
[root@nginx-backup rsync]# echo “/usr/local/rsync/bin/rsync –daemon –config=/usr/local/rsync/rsync2.conf” >> /etc/rc.local

4、*后启动两台服务器的监控脚本:
a、在90服务器:

[root@nginx tmp]# sh /root/test/rsync1.sh &
需要开机启动的话:
[root@nginx tmp]# echo “/root/test/rsync1.sh” >> /etc/rc.local
b、在89服务器:
[root@nginx tmp]# sh /root/test/rsync2.sh &
需要开机启动的话:
[root@nginx tmp]# echo “/root/test/rsync2.sh” >> /etc/rc.local

1.4测试
任意在其中一台服务器/root/test/路径下,新增一个文件,你会发现另一台服务器也同步了该文件。

同步之后,两台服务器下都会有rsync1.sh和rsync2.sh监控脚本,注意勿删!

如果需要3台或3台以上的服务器之间进行同步,则需要更改shell脚本,方法类似。

服务器为什么一般都是centos,而不是ubuntu.

1、ubuntu包管理简便完整,安装便利,组织系统,不过论及资源数量,还是远远比不上centos,只不过Centos的资源分布在大量的三方源中,利用起来稍微麻烦一点。

2、ubuntu的界面好看且用起来方便,适合开发和桌面应用。不过然并卵,这是服务器,没必要安装桌面的,占资源的服务开得越少越好

3、Centos作为老牌的redhat亲信,采用的组件和内核版本都比较保守,因此稳定性也要好得多,而且出现安全时间时,会*时间内推出安全补丁,对于长时间运行不重启的服务器来说相对更合适。

4、设备兼容性要见仁见智,因为ubuntu的内核较新,所以支持兼容机更好,而专业的存储设备等等,则一般仅提供centos/redhat的驱动,使用较广泛的驱动会随内核发布,一般不会有ubuntu驱动,相反debian的驱动可能会作为第二选择提供。所以你放100个心,专业设备你找不到驱动的,除非你有耐心去编译内核……同时,你会发现,几乎所有的专业服务器都支持centos安装,而不需要任何的额外存储或其他设备驱动……

5、因为ubuntu内核相对较新,所以在文件系统性能上会更好,不过正由于这个原因,老的软件兼容性会差一点点,不支持新内核的软件多了去了……同时长时间运行后,你会发现磁盘日志不同步的问题较多

6、ubuntu的LTS(长期支持版本)是不错,但是生命期到期后还是会要求你升级,否则各种问题。相反centos使用超过10年的系统多不胜数,一般不需要特别处理。

7、服务器选择的标准不是性能和易用性,而是稳定性和兼容性,其实用什么系统大家可以自行决定,喜欢用什么就用什么,反正除了你自己维护和使用,关别人什么事?

另外,我们已经把系统全部换成Centos了,所以有点偏向Centos,请大家见谅:

建议:

桌面和开发可以用Ubuntu

现网服务器一般用Centos/Redhat ES (区别是带支持和不带的)

专用系统根据系统需要选择,无论哪种均可,比如docker集群,hadoop大数据,SorlCloud之类的

服务器操作系统有哪些?

办公电脑想必都在用XP、Win7、Win10等操作系统,那么搭建网站所使用服务器需要使用什么操作系统。服务器操作系统主要分为四大流派:WINDOWS、LINUX、NETWARE、UNIX。

服务器操作系统
1、WINDOWS 服务器操作系统
常用版本WINNT 4.0 Server、Win2000/AdvancedServer、Win2003/AdvancedServer,WINDOWS SERVER 2008,,Windows服务器操作系统派应用,结合.Net开发环境,为微软企业用户提供了良好的应用框架。
2、Linux 服务器操作系统
LINUX操作系统虽然与UNIX操作系统类似,但是它不是UNIX操作系统的变种。Torvald从开始编写内核代码时仿效UNIX,几乎所有UNIX的工具与外壳都可以运行在LINUX上。
由于Linux内核具有稳定性、开放源代码等特点,另外,使用者不必支付打包的使用费用,所以Linux获得了IBM、戴尔等世界厂商的支持,同时景安DEll服务器也支持Linux操作系统。
3、NetWare 服务器操作系统
在一些特定行业和事业单位中,NetWare的批处理功能和安全、稳定的系统性能也有很大的生存空间。NetWare目前常用的版本主要有Novell的3.11、3.12、4.10、5.0等中英文版。
4、Unix 服务器操作系统
Unix服务器操作系统由AT&T公司和SCO公司共同推出,主要支持大型的文件系统服务、数据服务等应用。目前市面上流传的主要有SCOSVR、BSDUnix、SUNSolaris、IBM-AIX、HP-UX 。

服务器装什么操作系统好?

所有的计算机的运行都离不开操作系统,服务器是提供计算服务的高级计算机,当然也离不开操作系统。没有*好的系统,只有*适合自己的系统,相信读完这篇文章之后,你也可以选择适合自己的服务器操作系统。

%title插图%num

WindowsServer系统

相信90%的网民对于windows操作系统都不会陌生。WindowsServer系统在局域网配置中是*常见的,但由于它对服务器的硬件要求较高,且稳定性不是很好,作为WEB服务器使用时,巨大的内核通讯量不是windows可以承受的,所以微软的服务器操作系统一般只是用在中、低档服务器中。

当然Windowsserver系统也有自己的优点,windows在PC时代已经家喻户晓,在易用性方面,没有人比Windows做的更好,相比其他服务器系统来说,*大的降低了使用者的学习成本,这也是WindowsServer系统经久不衰的原因之一。

Linux系统

它的*大的特点就是开源,开源就是所有人,包括相关企业,政什么的,开发人员共同监督,在这样的监督之下,一套成熟的方案几乎很少出现漏洞。另外,linux还有一套完整的权限机制,没有相关权限,想要对系统造成破坏根本无从下手,安全性和稳定性相对较高,受到中、高级开发人员的青睐。

也正是因为Linux的安全性和稳定性,国内外很多保密机构服务器操作系统采购的首选,这类操作系统主要应用于中、高档服务器中。

Unix系统

Unix服务器操作系统由AT&T公司和SCO公司共同推出,主要支持大型的文件系统服务、数据服务等应用。功能强大。这种网络操作系统稳定和安全性能非常好,但由于它多数是以命令方式来进行操作的,不容易掌握,特别是初级用户。正因如此,小型局域网基本不使用Unix作为网络操作系统,UNIX一般用于大型的网站或大型的企、事业局域网中。因其体系结构不够合理,UNIX的市场占有率呈下降趋势。

如何证明这个服务器有问题?

1 cuixiao603 · 221 天前 · 3214 次点击
这是一个创建于 221 天前的主题,其中的信息可能已经有所发展或是发生改变。
公司项目用了某小公司的云服务器( 8 核 16g ),使用过程出现各种奇奇怪怪问题。

1.启动 springboot 的 jar 包,正常服务器启动完成只需 2 、3 秒,但是在这台服务器上非常慢,需要 1 分 42 秒(日志输出 spring 那几个大字母就要好几秒,输出完 spring 就是漫长的等待直到开始输出日志)
2.接口响应时间间歇性的非常慢,正常请求不到 1 秒的接口,有时候会响应 20 多秒甚至超时。
3.一句稍微复杂的 sql,在本地笔记本的 mysql 上只需 1 、2 秒就执行。在服务器上的 mysql 需要十几秒的查询时间。
这个速度甚至不如我们自己笔记本。可以用什么软件来测试一下证明这台服务器有问题呢(或者是证明是我们软件层面的问题)

服务器 MySQL spring 日志29 条回复 • 2020-09-17 05:00:53 +08:00
soji18 1
soji18 221 天前 via Android
跑分?
xflcx1991 2
xflcx1991 221 天前 ❤️ 1
难道不是在这个服务器上做一套 Benchmark 吗?
laminux29 3
laminux29 221 天前 ❤️ 1
跑分软件不就是为这种场景准备的吗?

CPU 、内存、存储设备等,跑一次分就知道了。
xooass 4
xooass 221 天前
某小公司? 不会就是那种租台服务器+买个 VPS 面板就开卖的吧,那种稳定性纯靠运气
superrichman 5
superrichman 221 天前 via iPhone ❤️ 1
盲猜服务器 dns 配置有问题
buliugu 6
buliugu 221 天前
这个超卖的有点过分啊
cuixiao603 7
cuixiao603 221 天前
@xooass #4 哈哈 这个倒不是,就是某公司的云服务外包给某大公司来建设的那种,但是这个大公司的技术也不怎么样
cuixiao603 8
cuixiao603 221 天前
@superrichman #5 能详细说说吗,是我本地的 dns 配置问题吗
hasdream 9
hasdream 221 天前 ❤️ 1
启动慢? FQDN 是不是没有设置 `time hostname -f ` 看需要多久。 觉得性能有问题就跑个分看下 Unixbench
lv2016 10
lv2016 221 天前
关于第三点:我自己电脑的运行速度确实比我阿里云(4c8g)的服务器快

594duck 11
594duck 221 天前 ❤️ 1
Spring 包又需要解 DNS

怀疑是服务器超售 CPU 同时磁盘 IO 不够

启动 Spring 包这么久,开二个 terminal 看一下 cpu 耗时和 idle,*重要的是 load average, NI, SI, WA 。
594duck 12
594duck 221 天前
Spring 包又不需要解 DNS

又不是 SSH 慢,因为 DNS 反解,别瞎走方向。

先看系统各 IO 层面。
cuixiao603 13
cuixiao603 221 天前
@hasdream #9 time hostname -f 很快 毫秒级的
cuixiao603 14
cuixiao603 221 天前
@lv2016 #10 哈哈 我还拿这个服务器和阿里云的 1 核服务器对比了,阿里云的很快的
AstroProfundis 15
AstroProfundis 221 天前
石头盘吧
DJQTDJ 16
DJQTDJ 221 天前 ❤️ 1
*机器配置
第二目前 cpu 内存使用率
第三网络环境
narmgalaxy 17
narmgalaxy 221 天前
盲猜是 mysql 相关的问题
dilu 18
dilu 221 天前 ❤️ 2
提供个方法

用 strace 看一下系统调用 再用-c 参数看看系统调用的统计

看看时间*长的系统调用是哪个

然后再有针对性的去排查 CPU 内存 磁盘 网络这几个方向
opengps 19
opengps 221 天前
具体问题需要找到具体制约因素,比如说硬盘慢,比如说 cpu 不够
单纯迁移过来表现不佳,没法归咎于“服务器问题”。分享个我的例子:*近给客户做的项目,明确要求如果使用云服务器硬盘则必须使用 ssd,但是对方一句我程序性能有问题,不服,我给他买了 ssd 换上立刻解决,当场打脸,对方不说话了
opengps 20
opengps 221 天前 ❤️ 2
楼层里有人提到超卖,这也是笼统不负责任的找答案方式,虽然不排除存在这个可能导致的,但是并不一定就是当前问题的根本原因
几乎所有云服务器都是虚拟机,而虚拟机有个天生的缺陷就是硬盘的 io 损失巨大(我测算过 1k 块大小的 iops 指标,只能达到原来物理硬盘的十分之一)
楼主可以先尝试下买个单独的 ssd 硬盘挂上,看下测试结果,在明确说下是不是硬盘问题,不建议直接说成“服务器问题”这么笼统的概念
jeeyong 21
jeeyong 221 天前
找台笔记本跑同样的项目.
笔记本没有类似的问题.就是他的问题.
如果领导坚持不换, 他就是吃回扣了..
告他. 骂他. 被公司解雇就继续骂领导, 骂公司.
自己开发自动发贴机, 天天各大论坛渠道发帖骂他…
Ayahuasec 22
Ayahuasec 221 天前
这个性能表现让我想起来,去年有个我同学用 qemu 跑 debian,结果速度巨慢,虚拟机都快分配了所有资源了还是很慢,测试程序的时候主机半分钟能跑完但是虚拟机里要快 5 分钟才能跑完,*后我们两个来回排查发现他 kvm 没开……
cuixiao603 23
cuixiao603 221 天前
@narmgalaxy #17
应该不是吧 springboot 刚开始启动还没开始连数据库呢
cuixiao603 24
cuixiao603 221 天前
@jeeyong #21 哈哈 说出你的故事啊老哥
CallMeReznov 25
CallMeReznov 221 天前
云系统*容易出问题的环节就是磁盘

建议看下 iostat 对比一下就知道了
jeeyong 26
jeeyong 220 天前
@cuixiao603 没啥故事…和领导吵架, 告公司, 攻击公司业务服务器…
现在公司黄了, 我待业在家..就这样.
bitholic 27
bitholic 220 天前
可能是系统熵(entropy)太低了,导致 tomcat 启动太慢,加个-Djava.security.egd=file:/dev/./urandom 试试?
theqwang 28
theqwang 220 天前
建议先测试一下服务器 IO 性能,多半 IO 有问题
nuk 29
nuk 205 天前
十有八九内存分超了,测试一下内存读写速度就知道了

自用服务器都买什么硬盘?

买了个 HP gen8 还在路上,先来取取经,

打算放到家里放点数据,跑点小服务,简单的数据分析啥的,

不打算当 NAS 用,所以对硬盘大小需求不大,但是数据还是尽可能保证安全*好了,

整个预算也不高,是买个相对靠谱点 10k , 15k 服务器硬盘就行了还是买个普通点的 NAS 硬盘 raid 一下,

求科普。

xspoco 1
xspoco 2016-11-06 00:16:25 +08:00
红盘 黑盘 组 raid 吧
yangxin0 2
yangxin0 2016-11-06 00:23:06 +08:00 via iPhone
红盘 raid1
Mac 3
Mac 2016-11-06 00:25:54 +08:00
黑盘
kokutou 4
kokutou 2016-11-06 00:34:48 +08:00 via Android
我是不重要数据两块 ST2000DM001 组的 raid0 。。。。
debuge 5
debuge 2016-11-06 07:23:55 +08:00 via Android
不知道是不是馊主意,个人觉得硬盘的可靠性已经比较高了,所以主要考虑价格、速度和噪音,如果数据不是很重要, raid 也不是必须的,上云盘同步,个人使用应该是妥妥的了。
当然,如果是商业应用,怎么稳妥怎么来。
strahe 6
strahe 2016-11-06 13:40:12 +08:00
@debuge 是个馊主意,看了下 7.2K 的企业版也不是很贵了,还是 raid 吧
loadinger 7
loadinger 2016-11-13 23:36:26 +08:00 via Android
cu 的 gen8 吗?我跟你同一天买的…你的到了吗?我还是法兰克福已封发…
strahe 8
strahe 2016-11-14 13:00:44 +08:00
@loadinger 我也没到 法兰克福已封发
loadinger 9
loadinger 2016-11-14 13:12:36 +08:00
@strahe 那我也就放心了…. [邪恶]
strahe 10
strahe 2016-11-14 14:00:06 +08:00
@loadinger 刚才看了下 早上已经到杭州了

loadinger 11
loadinger 2016-11-15 09:34:13 +08:00 via Android
@strahe 果然长沙还是我不行啊…还是老状态…
ideaplat 12
ideaplat 2016-11-19 08:35:19 +08:00 via Android
@strahe 我的还没出发,买的 dell t20
Hardrain 13
Hardrain 2016-12-03 18:51:20 +08:00
WD Red
loadinger 14
loadinger 2016-12-09 13:56:16 +08:00
楼主*后什么方案? 我 wd red 4t * 2 了.
strahe 15
strahe 2016-12-12 09:55:24 +08:00
@loadinger 我两个希捷盘 2t*2 raid1

https://item.jd.com/929438.html
loadinger 16
loadinger 2016-12-13 09:17:05 +08:00
@strahe 你装的什么系统啊. 我自己装的 debian .但是 hpe 的 监控系统不会装.也无法确定硬盘休眠.. 虽然很多人说这玩艺就是 7*24 的..
strahe 17
strahe 2016-12-13 14:38:00 +08:00
@loadinger 我也是 debian , 据说没用 gen8 的 raid 卡都系统无法确定硬盘休眠,我现在基本不使用 hpe 的功能,配置都是基于系统级别的,我是 24*7
loadinger 18
loadinger 2016-12-15 10:52:20 +08:00
@strahe 哈哈.那要握个爪了…. 难得能碰到装 debian 的..
2*4T 无 raid, 另外用了一个单盘 raid 装的系统. 之前我把系统装在了 sd 卡上,后来觉得不太合适就重装到现在 的单盘 raid 了. 因为 如果不 raid 装系统的时候都不能选中第三个 sata 口… 现在情况是 4T -> 1#sata 4T->2#sata 200G(OS) -> 3# 单盘 raid…这样的.
不知道你怎么装的系统…

服务器距离很近,但是调用服务时间很长是什么原因?

由于公司的业务要求,我们需要让两个项目调用同一个服务,服务通过 HTTP 传输,具体情况是这样的: 项目 A 和项目 B ,同时需要调用 S 服务,其中 A 和 S 位于同一个局域网中, B 是另外的一个局域网,之前 B 是联通托管, A 和 S 都是电信托管,后由于 B 访问 S 时间过长,把 S 的服务映射到了联通的 IP 地址。 映射之后到现在, B ping S 的地址只需要不到 1ms 。 但是, A 调用 S 的时候只需要 4~5ms 返回结果,但是 B 调用 S 就需要 100+ms ,有时候甚至到了 200ms 。 不知道是什么原因,会不会是 IP 地址映射的问题?

loading 1
loading 2016-12-14 15:46:44 +08:00 via Android
世界*远的距离……
raincious 2
raincious 2016-12-14 15:50:22 +08:00
说真的,楼主,你在发这个帖子之前有没有试过一条神奇的命令叫 ping ?
mhycy 3
mhycy 2016-12-14 15:54:25 +08:00
具体场景具体排查,在帖中楼主提到 B 到 S 的 ping 延迟是 1ms ,那么至少证明 ICMP 通路的路由是正常的。
建议试试 TCP PING 直接对服务接口进行检查,看延迟值是否在可接受范围内。
以此排除由路由配置导致的数据包走向异常。
raincious 4
raincious 2016-12-14 16:05:22 +08:00
我错了。楼主 Ping 过。

这样就进入了很“脏”的排查阶段了。首先是写一个 TCP Echo 服务器,部署在 S 上,然后让 B 调用这个 Echo 服务器看看延迟是什么样的,这样能排查是否是服务器上的应用程序或 iptables 这样防火墙导致的问题。

然后检查通过路由的 QoS 之类设置,看是不是 QoS 对数据请求设置了优先级。
flyingHagan 5
flyingHagan 2016-12-14 16:27:24 +08:00
@loading 这 TM 就叫咫尺天涯。
flyingHagan 6
flyingHagan 2016-12-14 16:28:40 +08:00
@mhycy 我去试试
flyingHagan 7
flyingHagan 2016-12-14 16:29:50 +08:00
@raincious 现在 A 调用 S 的时间只有 4~5ms ,这样能够排除应用程序的问题吗?
raincious 8
raincious 2016-12-14 16:35:49 +08:00
@mtdwss

不能排除没有,比如你后端程序对两个 IP 地址来源有不同的处理策略之类,或者 iptables 有特殊的配置。
raincious 9
raincious 2016-12-14 16:41:24 +08:00
@mtdwss

其实你可以做另一个测试,放另一台机器 C 在 B 的子网里,然后从 A 的子网的一台机器 D 访问 C (用 TCP Ping 之类),如果问题复现了,你需要检查 A<->B 网络中间的路由,看是否有比如 QoS 策略、防火墙之类导致了这些延迟。

如果问题没有复现,则可能问题很大可能是出在 B 和 A 这两台机器本身的程序上。
loading 10
loading 2016-12-14 18:06:10 +08:00 via Android
linux:tracerout
windows:tracert

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速