面试Java开发时问到高并发怎么处理的,还有sql优化有哪些办法,有哪位大神知道啊,新手!!
Java开发高并发的处理方法:
最基础的地方做起,优化我们写的代码,减少必要的资源浪费
避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以使用单例模式。对于String连接操作,使用 StringBuffer或StringBuilder,对于工具类可以通过静态方法来访问。
避免使用错误的方式,尽量不用instanceof做条件判断。使用java中效率高的类,比如ArrayList比Vector性能好。
服务器分离
对于web服务器来说,是最消耗资源的,于是我们有必要把与页面进行分离,我们把放到独立的服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为的问题而崩溃。在服务器上,我们可以对不同的配置进行优化。
缓存
具体接触过的缓存机制是hibernate的缓存机制。为了避免每次都向数据库中取得数据,我们把用户常常访问到的数据放到内存中,甚至缓存十分大的时候我们可以把内存中的缓存放到硬盘中。还有高级的分布式缓存数据库使用,都可以增加系统的抗压力。
分批传送
在做某项目的时候,一次传递的参数太多,而且数据库规定一次最多传递的参数最多是三万条,当时有五万条记录,那怎么传送呢?最终是分批传送,电梯里一次乘不下那么多的人,会报超重的bug,那就分批把人送上去。
还有一次在考试系统中,如果那么多的考试人员同时提交到数据库中,数据库的压力增大,有时会被down掉,当时采用的方法是使用ajax异步传输,没有等待考生点击提交按钮的时候,就把考生的答案自动提交,这样也避免了突然断电考生前面做过的题出现丢失的现象。
DB优化
在数据库设计的时候就要考虑到后期的维护,数据库三范式是我们设计数据库索要遵循的原则。
索引的建立:建立索引要适当,如果一个表经常用来被查询,对于增加和修改很少被用到,我们就可以为这个表建立索引,因为对于增加和修改和删除操作时,我们对索引的维护要大大超过索引给我们带来的效率。
表字段的类型选择要恰当。包括字段的长度、类型等,要根据实际存储的数据进行选择,长度不要过长,否则会影响效率。
外键要慎用,因为主键代表这一张表,而外键代表一群表,对表之间进行了关联,在删除修改等需要我们关联。
在数据库操作上。 尽量使用prepareStatement,少用Statement,因为PrepareStatement是进行预编译的。
connection设置为readOnly,Connection是对书库连接,属于重量级,我们使用即可。
连接池的使用,我们可以修改数据库默认的连接数。
问题一:什么是并发数? 并发的意思是指网站在同一时间访问的人数,人数越大,瞬间带宽要求更高,我个人的网站要求较高,在上午10点访问人数最多,做过几个供应商的测试,互联在线这家的并发数量是真实的,并且同一时间访问,没有限制;其实并发数的大小和服务器的带宽也有直接关系,一般的服务器是限最高流量的,有些服务器和机房是不限最高带宽,所以能足够保证
问题二:并发数是什么意思 并发数
并发数,计算机网络术语,是指同时访问服务器站点的链接数。
由于虚拟主机是建立在每台服务器多用户的基础上的,也就是多个用户共同使用一台服务器。为了避免同一台服务器上的某一个用户的IIS链接人数过多或占用服务器资源过多而影响其它用户的正常使用,所以,目前所有虚拟空间提供商都对单个用户的IIS链接数,流量及服务器进程占用CPU的比率进行了相应的限制。 当某一个用户的站点超出了服务器上的设制后,访问站点时就会出现服务器忙,或目前访问该站点的人数过多,超出了WEB的处理能力等相关错误提示。
问题三:什么是服务器并发量?并发量如何计算 并发的意思是指网站在同一时间访问的人数,人数越大,瞬间带宽要求更高。服务器并发量分为:1业务并发用户数;2最大并发访问数;3系统用户数;4同时在线用户数;
说明服务器实际压力,能承受的最大并发访问数,既取决于业务并发用户数,还取决于用户的业务场景,这些可以通过对服务器日志的分析得到。
一般只需要分析出典型业务(用户常用,最关注的业务操作)
给出一个估算业务并发用户数的公式(测试人员一般只关心业务并发用户数)
C=nL/T
C^=C+3×(C的平方根)
C是平均的业务并发用户数、n是login session的数量、L是login session的平均长度、T是指考察的时间段长度、C^是指业务并发用户数的峰值。
假设OA系统有1000用户,每天400个用户发访问,每个登录到退出平均时间2小时,在1天时间内用户只在8小时内使用该系统。
C=400×2/8=100
C^=100+3×(100的平方根)=100+3×10=130
另外,如果知道平均每个用户发出的请求数u,则系统吞吐量可以估算为u×C
精确估算,还要考虑用户业务操作存在一定的时间集中性(比如上班后1小时内是OA系统高峰期),采用公式计算仍然会存在偏差。
285-104-1346
问题四:并发量是什么意思 就是同时登录的用户太多了,超过的系统可以承载的最大数量
问题五:服务器的并发是什么意思,怎么计算的! 服务器并发指的是多个用户同时访问数据库中的同一字段的行为。这样的用户行为对于服务器的性能是一种考验。
但是,再好的服务器也有自己的性能上限,当并发用户数过多的时候,再好的服务器也支持不住。事实上,我们在生活中经常能遇到由于并发用户过多而导致的系统缓慢甚至瘫痪现象。比方说,很多使用过那些在线考试报名系统的朋友都会发现,半夜登录系统报名比白天登录系统报名要容,网页反应速度也要快一些,这就是由于晚上的并发用户数比较小的原因。
对于IT运维人员来说服务器并发是恐怖的,因为服务器的最大用户并发数并不是IT运维人员所能控制的,我们能做到的只是采用各种手段来提升系统的性能,提升服务器的性能利用率。
问题六:什么叫产品的最大并发数? 最大并发数,顾名思义就是同时登陆该网址的最大人数, 或服务器同时接收下载的最大数量
并发连接数太大,对整体网络环境的稳定性有害,这是网站采取的一种限制手段没有其他的方法,只有等人少的时候下载了
问题七:网站服务器的并发是什么意思 并发,就是同时的链接
你可以理解为,同一秒钟,同时链接网络的客户端数量
当然准确的意义上是毫秒或者更低,
重在一个同时的概念
问题八:当前用户并发数已满是什么意思 就是同时登录的用户太多了,超过的系统可以承载的最大数量
问题九:oracle的并发量和事物量是什么意思 并发量 可以理解为 同一时刻 ACTIVE的SESSION数量 查看V$SESSION即可看到
事物量当然就是V$TRANSACTION中的数量
问题十:网站的最大并发数是如何估算的 并发用户数的计算公式 系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是2000个,那么这个数量,就是系统用户数 同时在线用户数:在一定的时间范围内,最大的同时在线用户数量 平均并发用户数的计算: C=nL / T 其中C是平均的并发用户数,n是平均每天访问用户数,L是一天内用户从登录到退出的平均时间(操作平均时间),T是考察时间长度(一天内多长时间有用户使用系统) 并发用户数峰值计算: C^约等于C + 3根号C 其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论
消除瓶颈是提高服务器性能和并发能力的唯一途径。
如果你能够消除所有的瓶颈,你就能够最大的发挥硬件性能,让系统的性能和并发数到达最佳。
采用多线程多核编程,使用事件驱动或异步消息机制,尽量减少阻塞和等待操作(如I/O阻塞、同步等待或计时/超时等)。
原理:
1、多线程多核编程,消除cpu瓶颈。
2、采用IOCP或epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈。
3、采用事件驱动或异步消息机制,可以消除不必要的等待操作。
4、如果是Linux,可以采用AIO来消除磁盘I/O阻塞瓶颈。
5、在事件驱动框架或异步消息中统一处理timer事件,变同步为异步,而且可以在一个线程处理无数timer事件。
6、深入分析外部的阻塞来源,消除它。
比如数据库查询较慢,导致服务器处理较慢,并发数上不去,这时就要优化数据库性能。
7、如果与某个其他server通信量很大,导致性能下降较多。
可以考虑把这两个server放在一个主机上,采用共享内存的方式来做IPC通信,可以大大提高性能。
所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻只可以响应一个客户端的请求。而且对于TCP和UDP套接字,这两种服务器的实现方式也有不同的特点。
1、TCP循环服务器:
首先TCP服务器接受一个客户端的连接请求,处理连接请求,在完成这个客户端的所有请求后断开连接,然后再接受下一个客户端的请求。创建TCP循环服务器的算法如下:
复制代码 代码如下:
socket(……); //创建一个TCP套接字
bind(……); //邦定公认的端口号
listen(……); //倾听客户端连接
while(1) //开始循环接收客户端连接
{
accept(……);//接收当前客户端的连接
while(1)
{ //处理当前客户端的请求
read(……);
process(……);
write(……);
}
close(……); //关闭当前客户端的连接,准备接收下一个客户端连接
}
TCP循环服务器一次只处理一个客户端的请求,如果有一个客户端占用服务器不放时,其它的客户机连接请求都得不到及时的响应。因此,TCP服务器一般很少用循环服务器模型的。
2、TCP并发服务器:
并发服务器的思想是每一个客户端的请求并不由服务器的主进程直接处理,而是服务器主进程创建一个子进程来处理。创建TCP并发服务器的算法如下:
复制代码 代码如下:
socket(……); //创建一个TCP套接字
bind(……); //邦定公认的端口号
listen(……);//倾听客户端连接
while(1) //开始循环接收客户端的接收
{
accept(……);//接收一个客户端的连接
if(fork(……)==0) //创建子进程
{
while(1)
{ //子进程处理某个客户端的连接
read(……);
process(……);
write(……);
}
close(……); //关闭子进程处理的客户端连接
exit(……) ;//终止该子进程
}
close(……); //父进程关闭连接套接字描述符,准备接收下一个客户端连接
}
TCP并发服务器可以解决TCP循环服务器客户端独占服务器的情况。但同时也带来了一个不小的问题,即响应客户机的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作。
3、UDP循环服务器:
UDP服务器每次从套接字上读取一个客户端的数据报请求,处理接收到的UDP数据报,然后将结果返回给客户机。创建UDP循环服务器的算法如下:
1 socket(……); //创建一个数据报类型的套接字 2 bind(……); //邦定公认的短口号 3 while(1) //开始接收客户端的连接 4 { //接收和处理客户端的UDP数据报 5 recvfrom(……); 6 process(……); 7 sendto(……);//准备接收下一个客户机的数据报 8 }
消除行号
因为UDP是非面向连接的,没有一个客户端可以独占服务器。只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够处理的。
UDP循环服务器在数据报流量过大时由于处理任务繁重可能造成客户技数据报丢失,但是因为UDP协议本身不保证数据报可靠到达,所以UDP协议是允许丢失数据报的。
鉴于以上两点,一般的UDP服务器采用循环方式4、UDP并发服务器把并发的概念应用UDP就得到了并发UDP服务器,和并发TCP服务器模型一样是创建子进程来处理的。
创建UDP并发服务器的算法如下:
复制代码 代码如下:
socket(……); //创建一个数据报类型的套接字
bind(……); //邦定公认的短口号
while(1) //开始接收客户端的连接
{ //接收和处理客户端的UDP数据报
recvfrom(……);
if(fork(……)==0) //创建子进程
{
rocess(……);
sendto(……);
}
}
除非服务器在处理客户端的请求所用的时间比较长以外,人们实际上很少用这种UDP并发服务器模型的。
4、多路复用I/O并发服务器:
创建子进程会带来系统资源的大量消耗,为了解决这个问题,采用多路复用I/O模型的并发服务器。采用select函数创建多路复用I/O模型的并发服务器的算法如下:
初始化(socket,bind,listen);
复制代码 代码如下:
while(1)
{
设置监听读写文件描述符(FD_);
调用select;
如果是倾听套接字就绪,说明一个新的连接请求建立
{
建立连接(accept);
加入到监听文件描述符中去;
}
否则说明是一个已经连接过的描述符
{
进行操作(read或者write);
}
多路复用I/O可以解决资源限制问题,此模型实际上是将UDP循环模型用在了TCP上面。这也会带了一些问题,如由于服务器依次处理客户的请求,所以可能导致友的客户会等待很久。
0条评论