当前位置: 首页 > news >正文

黑龙江建设厅网站首页时尚网站设计教程

黑龙江建设厅网站首页,时尚网站设计教程,网页制作步骤图文,iis新建网站无法浏览前几天#xff0c;我发现了这个小问题#xff1a;该服务器运行了一段时间#xff0c;然后掉下来了。 然后通过启动脚本重新启动#xff0c;整个过程重复进行。 这听起来并不那么糟糕#xff0c;尽管对数据的损失很大#xff0c;但对业务的重要性并不重要#xff0c;因此… 前几天我发现了这个小问题该服务器运行了一段时间然后掉下来了。 然后通过启动脚本重新启动整个过程重复进行。 这听起来并不那么糟糕尽管对数据的损失很大但对业务的重要性并不重要因此我决定仔细研究一下找出问题出在哪里。 首先要注意的是服务器通过了所有的单元测试和大量的集成测试。 它在使用测试数据的所有测试环境中都能很好地运行那么生产中出了什么问题 很容易猜到在生产中它的负载可能比测试重或者比设计所允许的负载大因此它用尽了资源但是什么资源在哪里 这是一个棘手的问题。 为了演示如何研究此问题首先要做的是编写一些泄漏的示例代码而我将使用Producer Consumer模式来执行此操作因为我可以演示它的大问题。 为了演示泄漏的代码1我需要像往常一样需要一个高度人为的方案在这种情况下您可以想象您在一个将股票销售量记录在数据库中的系统上的股票经纪人工作。 订单由一个简单的线程接收并放入队列中。 然后另一个线程从队列中获取订单并将其写入数据库。 的 Order POJO非常简单如下所示 public class Order { private final int id; private final String code; private final int amount; private final double price; private final long time; private final long[] padding; /** * param id *            The order id * param code *            The stock code * param amount *            the number of shares * param price *            the price of the share * param time *            the transaction time */ public Order(int id, String code, int amount, double price, long time) { super(); this.id id; this.code code; this.amount amount; this.price price; this.time time; // This just makes the Order object bigger so that // the example runs out of heap more quickly. this.padding new long[3000]; Arrays.fill(padding, 0, padding.length - 1, -2); } public int getId() { return id; } public String getCode() { return code; } public int getAmount() { return amount; } public double getPrice() { return price; } public long getTime() { return time; } } Order POJO是一个简单的Spring应用程序的一部分该应用程序具有三个关键抽象当Spring调用它们的start()方法时它们会创建一个新线程。 其中第一个是OrderFeed 。 它的run()方法创建一个新的虚拟订单并将其放置在队列中。 然后它会休眠一会儿然后再创建下一个订单。 public class OrderFeed implements Runnable { private static Random rand new Random(); private static int id 0; private final BlockingQueueOrder orderQueue; public OrderFeed(BlockingQueueOrder orderQueue) { this.orderQueue orderQueue; } /** * Called by Spring after loading the context. Start producing orders */ public void start() { Thread thread new Thread(this, Order producer); thread.start(); } /** The main run loop */ Override public void run() { while (true) { Order order createOrder(); orderQueue.add(order); sleep(); } } private Order createOrder() { final String[] stocks { BLND.L, DGE.L, MKS.L, PSON.L, RIO.L, PRU.L, LSE.L, WMH.L }; int next rand.nextInt(stocks.length); long now System.currentTimeMillis(); Order order new Order(id, stocks[next], next * 100, next * 10, now); return order; } private void sleep() { try { TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } 第二类是OrderRecord 它负责从队列中获取订单并将其写入数据库。 问题在于将订单写入数据库要花费的时间要长得多。 我的recordOrder(…)方法中有1秒的长时间睡眠这证明了这一点。 public class OrderRecord implements Runnable { private final BlockingQueueOrder orderQueue; public OrderRecord(BlockingQueueOrder orderQueue) { this.orderQueue orderQueue; } public void start() { Thread thread new Thread(this, Order Recorder); thread.start(); } Override public void run() { while (true) { try { Order order orderQueue.take(); recordOrder(order); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * Record the order in the database * * This is a dummy method * * param order *            The order * throws InterruptedException */ public void recordOrder(Order order) throws InterruptedException { TimeUnit.SECONDS.sleep(1); } } 结果很明显 OrderRecord线程无法跟上队列将越来越长直到JVM用完堆空间并OrderRecord为止。 这是生产者-消费者模式的最大问题消费者必须能够跟上生产者的步伐。 为了证明他的观点我添加了第三类OrderMonitor 该类每隔几秒钟打印一次队列大小以便您可以看到出现问题的地方。 public class OrderQueueMonitor implements Runnable { private final BlockingQueueOrder orderQueue; public OrderQueueMonitor(BlockingQueueOrder orderQueue) { this.orderQueue orderQueue; } public void start() { Thread thread new Thread(this, Order Queue Monitor); thread.start(); } Override public void run() { while (true) { try { TimeUnit.SECONDS.sleep(2); int size orderQueue.size(); System.out.println(Queue size is: size); } catch (InterruptedException e) { e.printStackTrace(); } } } } 为了完成阵容我在下面添加了Spring上下文 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:phttp://www.springframework.org/schema/pxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd default-init-methodstart default-destroy-methoddestroybean idtheQueue classjava.util.concurrent.LinkedBlockingQueue/bean idorderProducer classcom.captaindebug.producerconsumer.problem.OrderRecordconstructor-arg reftheQueue//beanbean idOrderRecorder classcom.captaindebug.producerconsumer.problem.OrderFeedconstructor-arg reftheQueue//beanbean idQueueMonitor classcom.captaindebug.producerconsumer.problem.OrderQueueMonitorconstructor-arg reftheQueue//bean/beans 下一步是启动泄漏的示例代码。 您可以通过转到以下目录来执行此操作 /your-path/git/captaindebug/producer-consumer/target/classes …然后键入以下命令 java -cp /path-to/spring-beans-3.2.3.RELEASE.jar:/path-to/spring-context-3.2.3.RELEASE.jar:/path-to/spring-core-3.2.3.RELEASE.jar:/path-to/slf4j-api-1.6.1-javadoc.jar:/path-to/commons-logging-1.1.1.jar:/path-to/spring-expression-3.2.3.RELEASE.jar:. com.captaindebug.producerconsumer.problem.Main …其中“ path-to ”是您的jar文件的路径 有一两件事我真的很讨厌关于Java的是事实上它是如此难以运行在命令行中的任何程序。 您必须弄清楚什么是类路径需要设置哪些选项和属性以及什么是主类。 当然肯定有可能想到一种简单地键入Java programName的方法并且JVM找出所有内容在哪里特别是如果我们开始使用约定而不是配置它有多难 您还可以通过附加一个简单的jconsole来监视泄漏的应用程序。 如果要远程运行它则需要在上面的命令行中添加以下选项选择您自己的端口号 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port9010 -Dcom.sun.management.jmxremote.local.onlyfalse -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse …如果您查看使用的堆数量您会发现随着队列变大堆逐渐增加。 如果一千字节的内存泄漏了那么您可能永远也找不到它。 如果一千兆字节的内存泄漏问题将很明显。 因此目前要做的只是坐下来等待一些内存泄漏然后再继续进行下一步调查。 下次再说… 1源代码可以在我在GitHub上的Producer Consumer项目中找到 。 参考 调查内存泄漏第1部分–在Captain Debug的Blog博客上由JCG合作伙伴 Roger Hughes 编写泄漏代码 。 翻译自: https://www.javacodegeeks.com/2013/12/investigating-memory-leaks-part-1-writing-leaky-code.html
http://www.pierceye.com/news/790139/

相关文章:

  • 建设一个地方门户网站网站名称搜索不到
  • 南江县住房和城乡建设局网站上海seo关键词优化
  • 门窗厂家东莞网站建设湖南健康码
  • 企业网站建设的背景和目的互联网政务服务平台
  • 化州市住房和城乡建设局网站开发网站心得
  • 网站设计制作公司需要什么资质python h5网站开发
  • 广东深圳广东深圳网站建设惠州网站开发公司电话
  • 建管家企业网站discuz仿wordpress
  • 老网站不要了做新站需要怎么处理平面广告设计赏析
  • 怎么看网站是不是php语言做的网站系统优点
  • 旅游网站建设 策划书销售app哪个好用
  • 建个大型网站要多少钱wordpress页眉设置
  • 浅谈网站建设开发浙江中联建设集团网站
  • 哪有做网站全包圆装修公司
  • 邵阳建设银行网站是多少建设银行 企业
  • 网站开源系统网页制作与网站建设思维导图
  • 专门做前端项目的一些网站wordpress 朋友圈插件
  • 网站建设哪家专业网站开发费用怎么做账
  • 用dw怎么做网站首页wordpress 文章页面失败
  • 郑州网站制作专业乐云seowordpress it博客主题
  • 支付宝手机网站支付二维码怎么做网站 开发
  • 教育网站制作视频代理网址ag80hncom
  • 泰兴公司做网站建设制作外贸网站公司
  • 手机wap网站大全作品提示优化要删吗
  • 郑州网站建设技术支持云南澄江县建设局网站
  • wordpress建企业网站设置网站一级域名和二级域名
  • 云南省城乡与住房建设厅网站合肥网红打卡地
  • 用dw做的企业网站宁波seo优化费用
  • 网站制作开发建网站公司 蓝纤科技
  • 怎样到国外做合法网站法网站网站建设小组实验报告