简体   繁体   English

Google App Engine 500服务器上的矩阵乘法错误

[英]Matrix multiplication error on google app engine 500 server error

Backend code: 后端代码:

public class MyServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    resp.setContentType("text/plain");
    resp.getWriter().println("Please use the form to POST to this url");}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    long lStartTime = System.currentTimeMillis();
    String no = req.getParameter("name");
    int number =Integer.parseInt(no);
    resp.setContentType("text/plain");
    if (no == null) {
        resp.getWriter().println("Please enter a name");
    }
    resp.getWriter().println(no);
   // System.out.print("Enter number of rows in A: ");
    int rowsInA = number;
  //  System.out.print("Enter number of columns in A / rows in B: ");
    int columnsInA = number;
  //  System.out.print("Enter number of columns in B: ");
    int columnsInB = number;
    int[][] a = new int[rowsInA][columnsInA];
    int[][] b = new int[columnsInA][columnsInB];
 //   System.out.println("Enter matrix A");
    for (int i = 0; i < a.length; i++) {
        for (int  j = 0; j < a[0].length; j++) {
            a[i][j] = 3500;
        }}
    System.out.println("Enter matrix B");
    for (long i = 0; i < b.length; i++) {
        for (int j = 0; j < b[0].length; j++) {
            b[i][j] = 3500;
        }
    }
    int[][] c = multiply(a, b);
    System.out.println("Product of A and B is");
    for (int i = 0; i < c.length; i++) {
        for (int j = 0; j < c[0].length; j++) {
           // resp.getWriter().println(c[i][j]);
         // answer=  c[i][j] ;
        }

    }
    long lEndTime = System.currentTimeMillis();
    long difference = lEndTime - lStartTime;
    resp.getWriter().println("Difference  of matrix" + String.valueOf(difference));

}

public static int[][] multiply(int[][] a, int[][] b) {
    int rowsInA = a.length;
    int columnsInA = a[0].length; // same as rows in B
    int columnsInB = b[0].length;
    int[][] c = new int[rowsInA][columnsInB];
    for (int i = 0; i < rowsInA; i++) {
        for (int j = 0; j < columnsInB; j++) {
            for (int k = 0; k < columnsInA; k++) {
                c[i][j] = c[i][j] + a[i][k] * b[k][j];
            }
        }
    }
    return c;
   }
 }

Android side code: Android旁码:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    value=50;

    new ServletPostAsyncTask().execute(new Pair<Context, Integer>(this, value));
  }

 public class ServletPostAsyncTask extends AsyncTask<Pair<Context, Integer>,   Void, String> {
 private Context context;

 @Override
protected String doInBackground(Pair<Context, Integer>... params) {
    context = params[0].first;
    int name1 = params[0].second;


    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("http://android-996.appspot.com/hello"); // 10.0.2.2 is localhost's IP address in Android emulator
    try {
        String name= String.valueOf(name1);
        // Add name data to request
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("name", name));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpClient.execute(httpPost);
        if (response.getStatusLine().getStatusCode() == 200) {
            return EntityUtils.toString(response.getEntity());
        }
        return "Error: " + response.getStatusLine().getStatusCode() + " " + response.getStatusLine().getReasonPhrase();

    } catch (ClientProtocolException e) {
        return e.getMessage();
    } catch (IOException e) {
        return e.getMessage();
    }
}

@Override
protected void onPostExecute(String result) {
    Toast.makeText(context, result, Toast.LENGTH_LONG).show();
}

}

log error
F 20:28:17.492 Uncaught exception from servlet
  com.google.apphosting.api.DeadlineExceededException: This request (acb28d2bc4298b7d) started at 2015/09/20 15:27:17.707 UTC and was still executing at 2015/09/20 15:28:17.470 UTC.
    at com.example.Student.myapplication.backend.MyServlet.multiply(MyServlet.java:71)
    at com.example.Student.myapplication.backend.MyServlet.doPost(MyServlet.java:49)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:257)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:442)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:230)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:234)
    at java.lang.Thread.run(Thread.java:745)
I 20:28:17.494 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.
W 20:28:17.494 A problem was encountered with the process that handled this request, causing it to exit. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you may be throwing exceptions during the initialization of your application. (Error code 104)

When I try to run the application for large number such as 2500 on Google server side 500 internal error is displayed. 当我尝试在Google服务器端运行大量应用程序(例如2500)时,会显示500内部错误。 It works well for small numbers. 它适用于少量数字。 But for large number it displays error on server. 但是,对于大量服务器,它会显示错误。 Kindly help me in this regard. 在这方面请帮助我。 I also used long datatype but it displays the same error. 我还使用了长数据类型,但它显示了相同的错误。

Look in the logs to see what the error is there. 查看日志以查看错误所在。 It's entirely possible that with name=2500 you're running out of memory. 名称= 2500完全有可能耗尽内存。 2500 x 2500 x 4 x 2 is nearly 48Mb. 2500 x 2500 x 4 x 2接近48Mb。 The default instance size is 128Mb. 默认实例大小为128Mb。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM